iolists

什么是 iolist?

这是任何二进制文件。或者任何包含 0 到 255 之间整数的列表。或任何包含这两个东西的任意嵌套列表。

来源文章

使用深度嵌套的整数和二进制列表来表示 IO 数据,以避免在连接字符串或二进制文件时进行复制。

即使在组合大量数据时,它们也是高效的。例如,使用二进制语法 <<B1/binary, B2/binary>> 组合两个 50 千字节的二进制文件通常需要将两者重新分配到新的 100kb 二进制文件中。使用 IO 列表 [B1, B2] 仅分配列表,在本例中为三个单词。列表每个元素使用一个单词和另一个单词,有关详细信息,请参阅此处

使用++运算符会创建一个全新的列表,而不仅仅是一个新的两个元素列表。当列表很长时,重新创建列表以将元素添加到末尾会变得昂贵。

在二进制数据很小的情况下,分配 IO 列表可能比附加二进制文件更大。如果二进制数据可以小或大,通常最好接受 IO 列表的一致成本。

请注意,附加二进制文件已按此处所述进行优化。简而言之,二进制文件可以分配额外的隐藏空间。如果另一个二进制文件附加到适合自由空间的二进制文件,则将填充此文件。这意味着并非每个二进制附加都会导致两个二进制文件的完整副本。