我在用 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个文件记录。仅仅因为我一个符号一个符号地解析它,它就不可能是正确的。我怎样才能做得更好?
1条答案
按热度按时间fzwojiic1#
您的代码正在将字节的值添加到
totalRead
而不是递增1,因此它将以比预期快得多的速度计数到512,并丢失一段数据。循环应该检查并退出randomAccessFile.read()
返回-1/eof:请注意,此代码可能无法正确处理所有字节到字符的转换,因为它将字节转换为字符。