通过多个线程读取文件

Dhe*_*shi 1 java memory multithreading query-optimization

我有一个250Mb的文件要读.应用程序是多线程的.如果我允许所有线程读取文件,则会发生内存不足.我内存不足错误.

为了避免它.我想在内存中只有一个String(从流中读取)的副本,我希望所有线程都使用它.

while (true) {
    synchronized (buffer) {
        num = is.read(buffer);
            String str = new String(buffer, 0, num);

    }
    sendToPC(str);
}
Run Code Online (Sandbox Code Playgroud)

基本上我想在所有线程完成发送时只有一个字符串副本,我想读第二个字符串,依此类推.

use*_*421 6

为什么多线程?你只有一个磁盘,它只能这么快.几乎可以肯定,多线程它无济于事.任何依赖于在内存中存储整个文件的软件设计都是首先存在严重缺陷.

假设你定义了你的问题?

  • @Dheeraj:然后在*one thread*中读取文件,并使用单独的工作线程将数据推送到其他计算机. (4认同)
  • 我不完全同意你的回答,但也许这取决于它是如何解释的.在游戏开发中,需要加载大量数据,我们需要尽快加载它.当然,控制台是有限的,所以你可能无法做到这一点,但在PC上,将文件预加载到内存然后处理它的速度要快得多.实际上,在我正在研究的游戏引擎中,我正在改变我的内容加载器以使用数据流,而不是直接访问文件,因此我可以选择在给定足够内存的情况下预加载文件; 我不喜欢加载时间,这是加速它们的一种简单方法. (2认同)