模組 Stdlib.Buffer

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 個位元組的副本。

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

Buffer.blit src srcoff dst dstoff len 將緩衝區 src 目前內容中,從偏移量 srcoff 開始的 len 個字元複製到 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 u UTF-8 編碼的 u 附加到緩衝區 b 的末尾。

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

add_utf_16le_uchar b uUTF-16LE 編碼的 u 附加到緩衝區 b 的末尾。

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

add_utf_16be_uchar b uUTF-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 的末尾。

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

從產生器建立緩衝區

整數的二進制編碼

本節中的函式將整數的二進制編碼附加到緩衝區。

小端 (little-endian)(resp. 大端 (big-endian))編碼表示先儲存最低有效位元組(resp. 最高有效位元組)。大端也稱為網路位元組順序。原生端 (Native-endian) 編碼是小端或大端,具體取決於 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