我有一个二进制文件,我正在读取字节数组的集合.
该文件包含多个(任意数量)记录.本质上是一个字节块.每条记录都是任意长度的.
文件的标题提供每个记录的偏移量.
record 0: offset 2892
record 1: offset 4849
....
record 98: offset 328932
record 99: offset 338498
Run Code Online (Sandbox Code Playgroud)
我编写了代码来循环并在每个记录中读取它的字节数组.查看偏移量的差异给出了记录大小.寻找偏移然后调用ReadBytes()将记录读入其数组.
我目前的不完整解决方案不适用于最后一条记录.你如何将最后一条记录读入数组(记住它是任意长度的).
至于为什么?每条记录都是加密的,需要单独解密.我正在编写代码,将每条记录读入一个字节数组.解密它然后将所有记录写回文件.
代码根据要求添加:
//recordOffsets contain byte location of each record start. All headers (other than universal header) are contained within record 0.
recordBlocks = new List<RecordBlock>();
//store all recordOffsets. Record0 offset will be used to load rest of headers. Remaining are used to parse text of eBook.
for (int i = 0; i < standardHeader.numRecs; i++)
{
RecordBlock r = new RecordBlock();
r.offset = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
r.number = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
recordBlocks.Add(r);
}
foreach (RecordBlock r in recordBlocks)
{
if (r.number == recordBlocks.Count)
{
///deal with last record
}
else
{
r.size = recordBlocks[(r.number) + 1].offset - r.offset;
}
bookReader.Seek(r.offset, SeekOrigin.Begin);
r.data = bookReader.ReadBytes(r.size);
}
Run Code Online (Sandbox Code Playgroud)