gpt4 book ai didi

Java - 从文件读取字节时对其进行处理

转载 作者:行者123 更新时间:2023-12-01 17:30:15 26 4
gpt4 key购买 nike

有没有一种方法可以让java中的一个线程对某些FileInputStream或类似的文件进行读取调用,并让第二个线程同时处理正在加载的字节?我已经尝试了很多事情 - 我当前的尝试有一个线程运行此:

FileChannel inStream;
try {
inStream = (new FileInputStream(inFile)).getChannel();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int result;
try {
result = inStream.read(inBuffer);
} ...

第二个线程想要在加载字节时访问它们。显然,第一个线程中的读取调用会阻塞,直到缓冲区已满,但我希望能够访问该点之前加载到缓冲区中的字节。目前,我尝试的所有操作都有缓冲区,并且它的后备数组在读取完成之前保持不变 - 这不仅违背了该线程的要点,而且还表明数据正在加载到某个中间缓冲区中,然后稍后复制到我的缓冲区中,这似乎愚蠢。

一种选择是对数组进行一堆较小的读取,并在后续读取中添加偏移量,但这会增加额外的开销。

有什么想法吗?

最佳答案

当您顺序读取数据时,操作系统会在您需要数据之前提前读取数据。由于系统已经为您执行此操作,因此您可能无法获得预期的好处。

why can't I just make my Filechannel or FileInputStream "flow" into my ByteBuffer or some byte array?

这就是它已经做的事情。

如果您想要更无缝地加载数据,您可以使用内存映射文件,因为它会立即“出现”在程序的内存中,并在您使用时在后台加载。

关于Java - 从文件读取字节时对其进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com