Ruby:拆分二进制数据

Len*_*ann 3 ruby binary

我想分成data8154字节的大块:

data = Zlib::Deflate.deflate(some_very_long_string)
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

我试着用这个:

chunks = data.scan /.{1,8154}/
Run Code Online (Sandbox Code Playgroud)

......但数据丢失了!data有一个size11682,但当循环每个块并总结时,size我最终总大小为11677.丢失了5个字节!为什么?

Nak*_*lon 5

Regexp不是解析二进制数据的好方法.使用byteseach_slice操作字节.并用pack 'C*'它们将它们转换回字符串以进行输出或调试:

irb> data = File.open("sample.gif", "rb", &:read)
=> "GIF89a\r\x00\r........."

irb> data.bytes.each_slice(10){ |slice| p slice, slice.pack("C*") }
[71, 73, 70, 56, 57, 97, 13, 0, 13, 0]
"GIF89a\r\x00\r\x00"
[247, 0, 0, 0, 0, 0, 0, 0, 51, 0]
"\xF7\x00\x00\x00\x00\x00\x00\x003\x00"
...........
Run Code Online (Sandbox Code Playgroud)