如何在 Crystal 中将二进制文件写入文件
How to write binary into file in Crystal
我有一个 UInt32 数组,将其写入 Crystal lang 二进制文件的最有效方法是什么?
现在我正在使用 IO#write_byte(byte : UInt8)
方法,但我相信应该有一种方法可以写入比每 1 个字节更大的块。
你可以直接写一个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。
我有一个 UInt32 数组,将其写入 Crystal lang 二进制文件的最有效方法是什么?
现在我正在使用 IO#write_byte(byte : UInt8)
方法,但我相信应该有一种方法可以写入比每 1 个字节更大的块。
你可以直接写一个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。