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
开始。
Invalid_argument
如果 off
和 len
未指定 b
的有效范围。val blit : t -> int -> bytes -> int -> int -> unit
Buffer.blit src srcoff dst dstoff len
将缓冲区 src
当前内容的 len
个字符从偏移量 srcoff
开始复制到 dst
,从字符 dstoff
开始。
Invalid_argument
如果 srcoff
和 len
未指定 src
的有效范围,或者 dstoff
和 len
未指定 dst
的有效范围。val nth : t -> int -> char
获取缓冲区的第 n 个字符。
Invalid_argument
如果索引超出范围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 len
将 b
的长度截断为 len
注意:内部字节序列不会缩短。
Invalid_argument
如果 len < 0
或 len > length b
。注意:如果缓冲区的内部字节序列需要增长到超过 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 u
将 u
的 UTF-8 编码追加到缓冲区 b
的末尾。
val add_utf_16le_uchar : t -> Uchar.t -> unit
add_utf_16le_uchar b u
将 u
的 UTF-16LE 编码追加到缓冲区 b
的末尾。
val add_utf_16be_uchar : t -> Uchar.t -> unit
add_utf_16be_uchar b u
将 u
的 UTF-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
的末尾。
Invalid_argument
如果 ofs
和 len
未指定 s
的有效范围。val add_subbytes : t -> bytes -> int -> int -> unit
add_subbytes b s ofs len
从字节序列 s
中偏移量 ofs
处获取 len
个字符,并将它们追加到缓冲区 b
的末尾。
Invalid_argument
如果 ofs
和 len
未指定 s
的有效范围。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
的末尾。
End_of_file
如果通道包含的字符少于 n
个。在这种情况下,字符仍会添加到缓冲区中,以避免数据丢失。Invalid_argument
如果 len < 0
或 len > Sys.max_string_length
。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 位整数由 int32
和 int64
类型表示,它们可以解释为有符号或无符号数。
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
。