如何在Crystal中将二进制文件写入文件

时间:2016-02-06 22:49:08

标签: file binary crystal-lang

我有一个UInt32数组,在Crystal lang中将它写入二进制文件的最有效方法是什么?

到目前为止,我正在使用-strict -2方法,但我相信应该有一种方法来编写更大的块,而不是每1字节。

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

相关问题