Я вижу огромную разницу в производительности между двумя программами.BufferReader.skip() performance
import java.io.*;
import java.util.Date;
class SkipProg2 {
public static void main (String args[]) {
System.out.println (" File Reading "+ args.length);
System.out.println (" 1st Arg "+ args[0]);
System.out.println (" 2nd Arg "+ args[1]);
try {
FileInputStream fis = new FileInputStream(args[0]);
System.err.println("Time before skip : " + new Date());
Long off = Long.parseLong(args[1]);
fis.skip (off);
System.err.println("Time After skip : " + new Date());
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}
} // end main
}
И
import java.io.*;
import java.util.Date;
class SkipProg {
public static void main (String args[]) {
System.out.println (" File Reading "+ args.length);
System.out.println (" 1st Arg "+ args[0]);
System.out.println (" 2nd Arg "+ args[1]);
try {
FileInputStream fis = new FileInputStream(args[0]);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
System.err.println("Time before skip : " + new Date());
Long off = Long.parseLong(args[1]);
br.skip (off);
System.err.println("Time After skip : " + new Date());
} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}
} // end main
}
Одно использование FileInputStream.skip(), а другой BufferReader.skip(). Но, если значение смещения больше, то существует огромное различие (для Ex. 8 Secs по-разному для 2 ГБ) и в многопоточном приложении разница для одного и того же кода огромна (для смещения 2 Gb существует задержка в 15-20 минут). Я не могу заменить BufferReader.skip() с FileInputStream.skip(), поскольку каждый принимает смещение в байтах и другой в терминах символов. Для файла unicode он незаменим.
Первый вопрос, является ли мое предположение правильным? какие предложения?
Спасибо заранее.
Это 8 секунд на 2 Гб и 15 -20 минут, если у вас много потоков, делающих то же самое? Предполагая, что вы стареете вращающимися носителями, чтение нескольких файлов сразу приведет к тому, что голова будет искажаться повсюду, что не очень удобно для производительности. –