我有一个UInt32数组,在Crystal lang中将它写入二进制文件的最有效方法是什么?
到目前为止,我正在使用-strict -2
方法,但我相信应该有一种方法来编写更大的块,而不是每1字节。
答案 0 :(得分:4)
您可以直接将Slice(UInt8)
写入任何IO,这比迭代每个项目并逐个写入每个字节要快。
诀窍是以Array(UInt32)
的身份访问Pointer(UInt8)
的内部缓冲区,然后将其设为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。