module Buffer: Buffer
非同步存取
對緩衝區進行非同步存取可能會導致緩衝區狀態無效。因此,對緩衝區的並行存取必須同步處理(例如使用 Mutex.t
)。
type
t
緩衝區的抽象類型。
val create : int -> t
create n
傳回一個新的緩衝區,初始為空。 n
參數是保存緩衝區內容的內部位元組序列的初始大小。當緩衝區中儲存超過 n
個字元時,該位元組序列會自動重新配置,但當呼叫 reset
時會縮減回 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
目前內容中,從偏移量 off
開始的 len
個位元組的副本。
Invalid_argument
,如果 off
和 len
沒有指定 b
的有效範圍。val blit : t -> int -> bytes -> int -> int -> unit
Buffer.blit src srcoff dst dstoff len
將緩衝區 src
目前內容中,從偏移量 srcoff
開始的 len
個字元複製到 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
將 UTF-8 編碼的 u
附加到緩衝區 b
的末尾。
val add_utf_16le_uchar : t -> Uchar.t -> unit
add_utf_16le_uchar b u
將 UTF-16LE 編碼的 u
附加到緩衝區 b
的末尾。
val add_utf_16be_uchar : t -> Uchar.t -> unit
add_utf_16be_uchar b u
將 UTF-16BE 編碼的 u
附加到緩衝區 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
從產生器建立緩衝區
本節中的函式將整數的二進制編碼附加到緩衝區。
小端 (little-endian)(resp. 大端 (big-endian))編碼表示先儲存最低有效位元組(resp. 最高有效位元組)。大端也稱為網路位元組順序。原生端 (Native-endian) 編碼是小端或大端,具體取決於 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
。