2009-07-06 19 views

答えて

11

あなたが持っているものは必ずしも絶対的に最速であるとは限りませんが、単純です。実際には、私はという形式を全く使わないでしょう。私は文字セットを指定できるようなものを使用します。

// Why is there no method to give this guaranteed charset 
// without "risk" of exceptions? Grr. 
Charset utf8 = Charset.forName("UTF-8");  
BufferedReader input = new BufferedReader(
          new InputStreamReader(
           new FileInputStream("filename"), 
           utf8)); 

おそらくNIOを使用する方が速くなる可能性がありますが、実際の問題が分かるまでは私はしません。問題が発生しても他のことをしている場合は、とのデータが問題ではないことを確認してください。にプログラムを書き込んで、ファイルを読んでください。実行中にファイルシステムのキャッシュをクリアするためにあなたのボックスに必要なことを忘れないでください。

+1

コメント:はい! –

+1

InputStreamをどのようにインスタンス化できますか? –

+0

@jpartogiこれはFileInputStreamであるべきだと思います... – jsh

1

java.nio.channels.FileChannelを参照してください。

0

他のオプションをベンチマークしましたか?非常に小さなファイルのように、BufferedReaderを使用しない方が高速な場合もあると思います。最低限、小さなベンチマークを行い、典型的なユースケースで動作する最速の実装を見つけることをお勧めします。

0

あなたが読んでいるものによって異なります。完全なファイル、または特定の場所から、それを通過できるようにする必要がありますか、または完全なテキストを一度に読みたいのですか?

3

/fast/youを使用する場合は、文字データをエンコードされた形式にしてください(UTF-16という意味ではありません)。ディスクI/Oは(キャッシュされていない限り)一般的に遅いですが、デコードとデータの2倍の保持も問題になります。ロードするのが最も速いのはおそらくjava.nio.channels.FileChannel.map(MapMode.READ_ONLY, ...)ですが、割り当て解除に重大な問題があります。

通常の警告が適用されます。

0
File file = new File("querySourceFileName"); 
Scanner s = new Scanner(file); 
while (s.hasNext()) { 
    System.out.println(s.nextLine()); 
} 
+0

ファイルを読むのが最も明白で簡単な方法です。しかし、あなたは本当にスピードの面で競争できると思いますか? – phineas

関連する問題