Товарищи подскажите можно ли сделать следующее.
есть некий обработчик файла, который читает файл, обрабатывает поочерёдно каждую строку и по каждой строке результат записывает в другой файл.
Можно ли в данном случае ускорить весь процесс если осуществлять запись результатов для каждой строки в другом потоке? (с целью что бы разбор файла не ждал каждый раз записи на диск)
Например если делаю вот так через очередь то получается гораздо медленнее чем если сразу результат в файл записывать
public class TESTTESTParserWithShift {
String _input_file_name="";
String _ouput_file_name="";
public TESTTESTParserWithShift(){
_input_file_name = "qwe";
_ouput_file_name = "ttt1.tmp";
LoadTest();
}
public int LoadTest() throws Exception{
MyWriter myWriter = new MyWriter();
while( br.readLine()){
Str res = ОбработчикСтроки();
myWriter.AddStr(cResultPacket.strResult);
}
myWriter.Stop();
myWriter.t.join();
bw.close();
return 1;
}
class MyWriter implements Runnable{
Queue<String> queue;
public Thread t;
boolean isEnd = false;
BufferedWriter bw;
public MyWriter(){
try {
bw = new BufferedWriter(new FileWriter(_ouput_file_name));
} catch (IOException e) {
LOG.error(e);
}
queue = new LinkedList<String>();
t = new Thread(this,"sdfdsf");
t.start();
}
public void AddStr(String str){
synchronized (queue){
queue.add(str);
}
}
public void Stop(){
isEnd = true;
try {
bw.close();
} catch (IOException e) {
LOG.error(e);
}
}
@Override
public void run() {
String str;
while(isEnd == false){
try {
synchronized (queue) {
while((str=queue.poll())!=null){
bw.write(str);
}
}
} catch (Exception e) {
LOG.error(e);
}
}
}
}
}