以下の2つのプログラムでは、パフォーマンスに大きな違いが見られます。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()。しかし、オフセット値が大きい場合(2GBで異なる例8の場合)とマルチスレッドアプリケーションでは、同じコードの違いが大きくなります(2Gbのオフセットには約15-20分の遅延があります)。 BufferReader.skip()をFileInputStream.skip()に置き換えることはできません。バイト単位でオフセットを取り、char型で別のものを取ります。ユニコードファイルの場合は、置き換えられません。
私の前提が正しいかどうか最初の質問?何が示唆ですか?
ありがとうございました。
はその8 2ギガバイトのための秒、および15ですあなたが同じことをしているスレッドがたくさんある場合は-20分ですか?あなたが古いメディアを回転させていると仮定すると、複数のファイルを一度に読むことは、場所のいたる所にヘッドシークを引き起こします。 –