我有一个 UInt32 数组,将它写入 Crystal lang 中的二进制文件的最有效方法是什么?
到目前为止,我正在使用IO#write_byte(byte : UInt8)
方法,但我相信应该有一种方法可以编写比每 1 个字节更大的块。
我有一个 UInt32 数组,将它写入 Crystal lang 中的二进制文件的最有效方法是什么?
到目前为止,我正在使用IO#write_byte(byte : UInt8)
方法,但我相信应该有一种方法可以编写比每 1 个字节更大的块。
您可以直接将a写入Slice(UInt8)
任何IO,这应该比迭代每个项目并逐个写入每个字节要快。
诀窍是将Array(UInt32)
' 的内部缓冲区作为 a访问,Pointer(UInt8)
然后将其变为 a Slice(UInt8)
,这可以通过一些不安全的代码来实现:
array = [1_u32, 2_u32, 3_u32, 4_u32]
File.open("out.bin", "w") do |f|
ptr = (array.to_unsafe as UInt8*)
f.write ptr.to_slice(array.size * sizeof(UInt32))
end
确保永远不要保留对 的引用ptr
,有关详细信息,请参阅Array#to_unsafe。