有没有办法将1/4的文件写入String缓冲区?

时间:2013-02-24 00:13:15

标签: java file bufferedreader filereader stringbuffer

我有一段代码为。

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++)

2 个答案:

答案 0 :(得分:1)

您应该能够为每个线程创建1 file channel,并在文件的偏移处使用它。从文件通道中,您可以获取文件的大小以计算拆分并设置其当前位置。

答案 1 :(得分:0)

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

你可以做的是代替编写一个大文件,编写更小的文件,如果读取数据的处理非常耗时,读取缓冲区并在缓冲区加载到内存中并行处理它,会很好。

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

希望这有帮助。