我有一个二进制文件.它由4条消息组成,每条消息的大小为100字节.我想再次阅读最后两条消息.我正在使用BinaryReader对象.我寻求psosition 200然后我读:BinaryReaderObject.read(charBuffer,0,10000),其中charBuffer是大的enougth.我总是得到一个读取装置总是丢失1.而不是得到200我得到199.而不是得到400我得到399.我检查并看到文件的大小是正确的,我得到的数据从正确的地方.
Thnaks,
试试这段代码,看看你的文件会发生什么.
String message = @"Read {0} bytes into the buffer.";
String fileName = @"TEST.DAT";
Int32 recordSize = 100;
Byte[] buffer = new Byte[recordSize];
using (BinaryReader br = new BinaryReader(File.OpenRead(fileName)))
{
br.BaseStream.Seek(2 * recordSize, SeekOrigin.Begin);
Console.WriteLine(message, br.Read(buffer, 0, recordSize));
Console.WriteLine(message, br.Read(buffer, 0, recordSize));
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
我用400字节的测试文件得到以下输出.
Read 100 bytes into the buffer.
Read 100 bytes into the buffer.
Run Code Online (Sandbox Code Playgroud)
如果我寻求2 * recordSize + 1或使用399字节的文件,我得到以下输出.
Read 100 bytes into the buffer.
Read 99 bytes into the buffer.
Run Code Online (Sandbox Code Playgroud)
所以它按预期工作.