如何读取固定大小的字节轮流使用Ruby继续?

时间:2012-03-31 10:18:01

标签: ruby size byte fixed continuations

我有一个二进制文件,我想读取此文件,如前四个字节,然后是接下来的5个字节,然后是接下来的3个字节,直到文件结束。

我能够使用each_byte读取文件,但我想按顺序将所有这些字节按类别分类存储在文件中。

我能够使用以下行读取此内容,但不知道如何使用连续读取固定大小的块。

File.open('myfile','rb') do |file|
file.each_byte {|ch| print "#{ch.chr}:#{ch}\t"}

2 个答案:

答案 0 :(得分:1)

我不确定我理解但也许是这样的:

file.read.scan(/(.{4})(.{5})(.{3})/).each do |a,b,c|
    puts "first 4 bytes: #{a}"
    puts "bytes 5 to 10: #{b}"
    puts "3 more bytes: #{c}"
end

答案 1 :(得分:0)

它不是很快,但它是红宝石: - )

file.each_byte.slice_before({pattern: [4,5,3].cycle, left: 0}) do |ele, state|
  if state[:left] == 0
    state[:left] = state[:pattern].next
    true
  else
    state[:left] -= 1
    false
  end
end