模块 Stdlib.Buffer

module Buffer: Buffer

非同步访问

对缓冲区的非同步访问可能导致缓冲区状态无效。因此,对缓冲区的并发访问必须进行同步(例如使用 Mutex.t)。

type t 

缓冲区的抽象类型。

val create : int -> t

create n 返回一个新的缓冲区,最初为空。参数 n 是保存缓冲区内容的内部字节序列的初始大小。当缓冲区中存储的字符数超过 n 时,该字节序列会自动重新分配,但在调用 reset 时会缩回至 n 个字符。为了获得最佳性能,n 应该与预期存储在缓冲区中的字符数量具有相同的数量级(例如,对于保存一行输出的缓冲区,n 为 80)。但是,如果缓冲区的大小超过此限制,也不会发生任何不良情况。如有疑问,例如可以取 n = 16。如果 n 不在 1 到 Sys.max_string_length 之间,它将被裁剪到该区间。

val contents : t -> string

返回缓冲区当前内容的副本。缓冲区本身保持不变。

val to_bytes : t -> bytes

返回缓冲区当前内容的副本。缓冲区本身保持不变。

val sub : t -> int -> int -> string

Buffer.sub b off len 返回缓冲区 b 当前内容的副本,长度为 len 个字节,从偏移量 off 开始。

val blit : t -> int -> bytes -> int -> int -> unit

Buffer.blit src srcoff dst dstoff len 将缓冲区 src 当前内容的 len 个字符从偏移量 srcoff 开始复制到 dst,从字符 dstoff 开始。

val nth : t -> int -> char

获取缓冲区的第 n 个字符。

val length : t -> int

返回缓冲区中当前包含的字符数。

val clear : t -> unit

清空缓冲区。

val reset : t -> unit

清空缓冲区并释放保存缓冲区内容的内部字节序列,将其替换为由 Buffer.create n 分配的长度为 n 的初始内部字节序列。对于可能增长很多的长期存在的缓冲区,reset 允许更快地回收缓冲区使用的空间。

val output_buffer : out_channel -> t -> unit

output_buffer oc b 将缓冲区 b 的当前内容写入输出通道 oc

val truncate : t -> int -> unit

truncate b lenb 的长度截断为 len 注意:内部字节序列不会缩短。

追加

注意:如果缓冲区的内部字节序列需要增长到超过 Sys.max_string_length,则所有 add_* 操作都可能引发 Failure

val add_char : t -> char -> unit

add_char b c 将字符 c 追加到缓冲区 b 的末尾。

val add_utf_8_uchar : t -> Uchar.t -> unit

add_utf_8_uchar b uuUTF-8 编码追加到缓冲区 b 的末尾。

val add_utf_16le_uchar : t -> Uchar.t -> unit

add_utf_16le_uchar b uuUTF-16LE 编码追加到缓冲区 b 的末尾。

val add_utf_16be_uchar : t -> Uchar.t -> unit

add_utf_16be_uchar b uuUTF-16BE 编码追加到缓冲区 b 的末尾。

val add_string : t -> string -> unit

add_string b s 将字符串 s 追加到缓冲区 b 的末尾。

val add_bytes : t -> bytes -> unit

add_bytes b s 将字节序列 s 追加到缓冲区 b 的末尾。

val add_substring : t -> string -> int -> int -> unit

add_substring b s ofs len 从字符串 s 中偏移量 ofs 处获取 len 个字符,并将它们追加到缓冲区 b 的末尾。

val add_subbytes : t -> bytes -> int -> int -> unit

add_subbytes b s ofs len 从字节序列 s 中偏移量 ofs 处获取 len 个字符,并将它们追加到缓冲区 b 的末尾。

val add_substitute : t -> (string -> string) -> string -> unit

add_substitute b f s 使用替换将字符串模式 s 追加到缓冲区 b 的末尾。替换过程查找模式中的变量引用,并使用通过将映射 f 应用于变量名获得的值替换每个变量引用。在字符串模式中,变量引用是一个非转义的 $,后面紧跟着一个变量名,该变量名是以下之一

  • 一个非空字符序列,包含字母数字或 _ 字符,
  • 由一对匹配的括号或花括号括起来的一系列任意字符。转义的 $ 字符是紧跟在反斜杠字符后面的 $;这两个字符一起表示一个普通的 $
val add_buffer : t -> t -> unit

add_buffer b1 b2 将缓冲区 b2 的当前内容追加到缓冲区 b1 的末尾。 b2 不被修改。

val add_channel : t -> in_channel -> int -> unit

add_channel b ic n 从输入通道 ic 中最多读取 n 个字符,并将它们存储到缓冲区 b 的末尾。

缓冲区和序列

val to_seq : t -> char Seq.t

按升序迭代缓冲区。

如果在迭代期间修改了缓冲区,则行为未指定。

val to_seqi : t -> (int * char) Seq.t

按升序迭代缓冲区,同时生成字符的索引。

如果在迭代期间修改了缓冲区,则行为未指定。

val add_seq : t -> char Seq.t -> unit

将字符添加到缓冲区

val of_seq : char Seq.t -> t

从生成器创建缓冲区

整数的二进制编码

本节中的函数将整数的二进制编码追加到缓冲区。

小端(分别是大端)编码表示最低(分别是最)有效字节首先存储。大端也称为网络字节顺序。本地端编码可以是小端或大端,具体取决于 Sys.big_endian

32 位和 64 位整数由 int32int64 类型表示,它们可以解释为有符号或无符号数。

8 位和 16 位整数由 int 类型表示,该类型具有比二进制编码更多的位。编码这些值的函数将其输入截断为其最低有效字节。

val add_uint8 : t -> int -> unit

add_uint8 b i 将二进制无符号 8 位整数 i 追加到 b

val add_int8 : t -> int -> unit

add_int8 b i 将二进制有符号 8 位整数 i 追加到 b

val add_uint16_ne : t -> int -> unit

add_uint16_ne b i 将二进制本地端无符号 16 位整数 i 追加到 b

val add_uint16_be : t -> int -> unit

add_uint16_be b i 将二进制大端无符号 16 位整数 i 追加到 b

val add_uint16_le : t -> int -> unit

add_uint16_le b i 将二进制小端无符号 16 位整数 i 追加到 b

val add_int16_ne : t -> int -> unit

add_int16_ne b i 将二进制本地端有符号 16 位整数 i 追加到 b

val add_int16_be : t -> int -> unit

add_int16_be b i 将二进制大端有符号 16 位整数 i 追加到 b

val add_int16_le : t -> int -> unit

add_int16_le b i 将二进制小端有符号 16 位整数 i 追加到 b

val add_int32_ne : t -> int32 -> unit

add_int32_ne b i 将二进制本地端 32 位整数 i 追加到 b

val add_int32_be : t -> int32 -> unit

add_int32_be b i 将二进制大端 32 位整数 i 追加到 b

val add_int32_le : t -> int32 -> unit

add_int32_le b i 将二进制小端 32 位整数 i 追加到 b

val add_int64_ne : t -> int64 -> unit

add_int64_ne b i 将二进制本地端 64 位整数 i 追加到 b

val add_int64_be : t -> int64 -> unit

add_int64_be b i 将二进制大端 64 位整数 i 追加到 b

val add_int64_le : t -> int64 -> unit

add_int64_ne b i 将二进制小端 64 位整数 i 追加到 b