2012-04-27 10 views
0

"ABCDEabcde ..... XYZxyz"のような文字列を含む大きなファイルがあります。さて、私はそれのいくつかのサブシーケンスを抽出したいと思います。たとえば、10番目の文字から50番目の文字まで、15番目の文字から55番目の文字(すべてのサブシーケンスは同じ長さであり、開始位置は常に増加しています)とします。誰でもJavaの速い方法でそれを行う方法を私に助けることができますか?そこファイルからのサブシーケンスの抽出 - Java - Fast Way

BufferedReader br = new BufferedReader(new FileReader(<FileName>), int size); 

だけ入力バッファサイズとチェックしておく:

+0

どのような提案ですか、どちらの方が速いのですか? – Arpssss

+1

私たちは何から選んでいますか?何を試しましたか?予想されるランタイム環境は何ですか?入力ファイルのサイズ制限はいくらですか?サブシーケンスサイズの制限はありますか? –

+0

@ColinD固定長のサブシーケンス、たとえばファイルの内容「My Name is」を選択しています。位置1から位置3までのサブシーケンス、つまり「My」を抽出します。 – Arpssss

答えて

0

ようれるMappedByteBufferとアクセスファイルを使用することができますそのチャンクだけであなたのsubStringsのために。何も見つからない場合は、それを破棄して次のチャンクに進みます。

+0

実際、私はそれを考えました。しかし、それは遅くなるはずです。私はこれを行うための一般的なバッファリーダー、ファイルリーダーなどよりも高速なアプローチを探しています。より速く組み込みのものを言うことができます。 – Arpssss

0

あなたはなぜこのような何かをしようとしないバイトのバッファ

http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html

RandomAccessFile raf = new RandomAccessFile(....); 
FileChannel fc = raf.getChannel(); 

MappedByteBuffer mmap = fc.map(READ_ONLY, 0, fc.size()); 
+0

ありがとうたくさんのtigran。 – Arpssss

+0

これはファイル全体を 'ByteBuffer'にロードし、ガベージコレクタが呼び出されるまで保存しますか? – noMAD

+0

私はそれをチェックすると、ファイル全体をメモリにロードします。私にとっては不可能です。しかし、ありがとう。 – Arpssss

関連する問題