【发布时间】:2017-02-04 12:47:26
【问题描述】:
我有一个管道,我需要从中读取数据。但是,正如我在阅读之前所了解的那样,我必须创建一些大小的缓冲区。问题是如何定义缓冲区的大小以从管道中读取all 数据?
这是我的代码:
RandomAccessFile aFile = new RandomAccessFile(PIPE_FILE, "r");
FileChannel inChannel = aFile.getChannel();
ByteBuffer buf = ByteBuffer.allocate(4);//temp 4
while(true){
System.out.println("Size:"+inChannel.size());//returns 0
int bytesRead = inChannel.read(buf);
byte [] bytes=buf.array();
...
buf.clear();
}
【问题讨论】:
-
选择这种大小的缓冲区是在读取时间和内存之间进行权衡。如果您采用较小的尺寸,则将花费更多时间,因为使用的循环次数越多,如果尺寸越大,则使用的内存越多。我已经看到
1024作为要选择的命令值。 -
你不能使用
Files.readAllBytes有什么具体原因吗? -
@BackSlash 说实话我不知道。在我在互联网上看到的许多示例中,人们建议使用 RandomAccessFile 从命名管道中读取数据。
标签: java