如何使用MappedByteBuffer从管道读取

时间:2016-12-06 18:49:44

标签: java pipe nio

我想读取一个文件,该名称由命令行参数传递。我很关心阅读速度,所以我正在尝试使用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是否有意义?

0 个答案:

没有答案