有没有办法让 java 中的一个线程对某些 FileInputStream 或类似内容进行读取调用,并让第二个线程同时处理正在加载的字节?我已经尝试了很多事情 - 我目前的尝试有一个线程运行这个:
FileChannel inStream;
try {
inStream = (new FileInputStream(inFile)).getChannel();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int result;
try {
result = inStream.read(inBuffer);
} ...
第二个线程想要在加载字节时访问它们。显然,第一个线程中的读取调用会阻塞,直到缓冲区已满,但我希望能够在该点之前访问加载到缓冲区中的字节。目前,我尝试的所有内容都有缓冲区,并且它的支持数组在读取完成之前保持不变 - 这不仅破坏了这个线程的要点,而且还表明数据正在某个地方加载到某个中间缓冲区,然后稍后复制到我的缓冲区中,这似乎愚蠢。
一种选择是对数组进行一系列较小的读取,并在后续读取时使用偏移量,但这会增加额外的开销。
有任何想法吗?