以下问题:我有一个大文本文件,每行包含 13 个字节。我不想使用 InputStream 以常见的方式逐行读取文件。我正在尝试使用 NIO Channels 和 MappedByteBuffers 以获得更好的性能和有限的资源。
所以这就是我到目前为止所做的:
RandomAccessFile data = new RandomAccessFile("the_file.txt", "rw");
FileChannel channel = data.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, capacity);
这里容量是 n*13,以确保只有整行适合缓冲区。但这不起作用!我像这样填充缓冲区:
int bytesRead = channel.read(buffer);
但这并没有填满整个缓冲区!bytesRead不等于capacity,更糟糕的是,在我的情况下bytesRead%13不为零,这意味着它不包含整行,最后有些东西被切断了。如何将一定数量的字节读入缓冲区?在我的情况下,我正好需要 n*13 字节,这样原始行就不会被分割......