Я вижу огромную разницу в производительности между двумя программами.
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 (). Но если значение смещения больше, то оно сильно различается (например, для 8 Гбайт различно для 2 ГБ), а в многопоточном приложении разница для одного и того же кода огромна (для смещения 2 Гб задержка составляет около 15-20 минут). Я не могу заменить BufferReader.skip () на FileInputStream.skip (), так как один принимает смещение в виде байтов, а другой - в виде символов. Для файла unicode он незаменим.
Первый вопрос, верно ли мое предположение? какие есть предложения?
Заранее спасибо.