目前我正在使用BinData gem来解析二进制文件格式。它工作得很好,除了我不知道在哪里停止。该文件分为我使用BinData Records读取的属性。可以有16到18个属性(取决于它所需的文件)。所以,如果我这样做:
16.times{
# parse data from property.
}
当有16个属性时,它可以正常工作,但是,如果我将其提高到17,我会收到以下错误。
'readbytes': End of file reached (EOFError)
我的问题是,我怎么能一起避免16次并将其读取,直到它读取所有属性,然后在文件结束时出现错误时停止。
答案 0 :(得分:0)
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存在一系列记录,然后让它们全部读取。