0

我有一段代码。

File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String temp;
StringBuffer sb=new StringBuffer();
while((temp=br.readLine())!=null){          
   sb.append(temp);
   sb.append(" ");
}

这将从文件中读取每一行并将其存储在 StringBuffer 中。我的文件非常大,我需要对它进行多线程处理,这样处理速度会更快。有没有办法说我只想将文件的 1/4 写入缓冲区?

我知道我不能这么说。但我想要与此等价的东西。

for(int i=0; i<reader.length/4; i++)
4

2 回答 2

1

You should be able to create 1 file channel per thread, and use that at offsets through the file. From a file channel you can get the file's size to work out your splits and set its current location.

于 2013-02-24T00:53:01.570 回答
0

不,你无法解决这个问题,因为你不能同时读取文件,如果一次只有一个线程从流中读取,这将同时发生,也不是并行发生。所以那里没有任何好处,除此之外,您将拥有更难编写和阅读的代码,以及大量线程上下文切换和线程仲裁,这些都不便宜。

你可以做的不是写一个大文件,而是写更多的小文件,如果读取数据的处理很耗时,请读取一个缓冲区,然后将该缓冲区加载到内存中并行处理它,这将解决美好的。

此外,如果您使用的是单线程,请使用 StringBuilder 而不是 StringBuffer。

希望这可以帮助。

于 2013-02-24T00:21:23.613 回答