通过随机存取文件读取文件段

von4xj4u  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(219)

我在用 RandomAccessFile 用于写入段。现在我想读取一些文件段,但在读取结束时遇到了问题。
例如,我想读取一个文件页(每页包含512字节)。

var totalRead = 0;
var readingByte = 0;
val bytesToRead = 512; // Each file page - 512 bytes
var randomAccessFile = new RandomAccessFile(dbmsFile, "rw");
randomAccessFile.seek(pageId * PAGE_SIZE); // Start reading from chosen page (by pageId)
valr stringRepresentation = new StringBuilder("");

while (totalRead < bytesToRead) {
     readingBytes = randomAccessFile.read();
     totalRead += readingBytes;
     stringRepresentation.append((char) readingBytes); 
}

但这种方法是不对的,因为实际上,它是在阅读非整页的内容,只是其中的一小部分。因为512-大约41个文件记录。仅仅因为我一个符号一个符号地解析它,它就不可能是正确的。我怎样才能做得更好?

fzwojiic

fzwojiic1#

您的代码正在将字节的值添加到 totalRead 而不是递增1,因此它将以比预期快得多的速度计数到512,并丢失一段数据。循环应该检查并退出 randomAccessFile.read() 返回-1/eof:

while (totalRead < bytesToRead && (readingByte = randomAccessFile.read()) != -1) {
     totalRead++;
     stringRepresentation.append((char) readingByte); 
}

请注意,此代码可能无法正确处理所有字节到字符的转换,因为它将字节转换为字符。

相关问题