当使用BinData无法读取时,停止从文件读取

时间:2016-06-09 18:34:05

标签: ruby bindata

目前我正在使用BinData gem来解析二进制文件格式。它工作得很好,除了我不知道在哪里停止。该文件分为我使用BinData Records读取的属性。可以有16到18个属性(取决于它所需的文件)。所以,如果我这样做:

16.times{
    # parse data from property.
}

当有16个属性时,它可以正常工作,但是,如果我将其提高到17,我会收到以下错误。

'readbytes': End of file reached (EOFError)

我的问题是,我怎么能一起避免16次并将其读取,直到它读取所有属性,然后在文件结束时出现错误时停止。

1 个答案:

答案 0 :(得分:0)

来自examples/tcp_ip.rb

  class PcapFile < BinData::Record
    endian :little

    struct :head do
      uint32 :magic
      uint16 :major
      uint16 :minor
      int32  :this_zone
      uint32 :sig_figs
      uint32 :snaplen
      uint32 :linktype
    end

    array :records, :read_until => :eof do
      uint32 :ts_sec
      uint32 :ts_usec
      uint32 :incl_len
      uint32 :orig_len
      string :data, :length => :incl_len
    end
  end

该示例中采用的方法是告诉BinData存在一系列记录,然后让它们全部读取。