我想读取一个文件,该名称由命令行参数传递。我很关心阅读速度,所以我正在尝试使用MappedByteBuffer
。
FileInputStream fileStream = new FileInputStream(filename);
System.out.println("fileStream.available(): " + fileStream.available());
FileChannel channel = fileStream.getChannel();
System.out.println("channel.size(): " + channel.size());
MappedByteBuffer buffer =
channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
System.out.println("buffer.limit(): " + buffer.limit());
for (int i = 0; i < buffer.limit(); i++) {
// process buffer.get() ...
}
它适用于常规文件,但它不会从管道读取数据(例如来自/dev/fd/63
)。当我运行java Program <(perl -0777pe '$_=$_ x 1000' jfdctint.c)
时,我得到以下输出:
fileStream.available(): 65536
channel.size(): 0
buffer.limit(): 0
所以没有什么可以从缓冲区读取。我很难找出MappedByteBuffer
是否与管道兼容。如何阅读数据并将FileChannel
映射到管道上的MappedByteBuffer
是否有意义?