我有一段代码为。
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++)
答案 0 :(得分:1)
您应该能够为每个线程创建1 file channel,并在文件的偏移处使用它。从文件通道中,您可以获取文件的大小以计算拆分并设置其当前位置。
答案 1 :(得分:0)
不,你无法解决这个问题,因为你无法同时读取文件,如果一次只有一个线程从流中读取,这将同时发生,也不会并行发生。所以没有任何好处,除此之外,你将有一个更难以编写和读取的代码,以及许多线程上下文切换和线程仲裁,这些并不便宜。
你可以做的是代替编写一个大文件,编写更小的文件,如果读取数据的处理非常耗时,读取缓冲区并在缓冲区加载到内存中并行处理它,会很好。
此外,如果您使用单个线程,请使用StringBuilder而不是StringBuffer。
希望这有帮助。