2011-10-27 6 views
0

私はrawlyで操作する必要があるデータベースダンプファイルがあります。ファイルを読み込み、行単位で操作する必要がありますが、ファイル全体をメモリに入れることはできません(理論的には10GB +にすることができます)。ファイルを読み取り、行としてバイトとして処理する最もエレガントな方法

ファイルの最後まで、読んで、それぞれの行を個別に操作したいと思っています。それは奇妙なキャラクターフレンドリーでなければなりません(すべての種類のバイトを持つことができます)。

+0

FileInputStreamを使用します。これは、バイトを提供しますが、一度に多くのバイトを必要とします。あなたは自分で改行を認識する必要がありますが、私は彼らがどのように見えるかを知っていると仮定します。 – bdares

+0

データベースダンプのエンコーディング**を知っていますか?それともバイナリ(非テキスト)データを含んでいますか? –

答えて

2

古いnioの例であるgrepを適用して、不要な場合はパターンマッチを削除することができます。

0

改行はあなたがBufferedReaderの#のreadLineを(使用することができます興味)とバック[]

バイトに文字列を変換しない場合は、他の方法は、バッファとして[]バイトを使用することですが(である必要があります行に十分な大きさ)、InputStream#read(byte [])を使用してバイトで埋めてください。ラインフィードのバッファを検索し、バッファの一部で作業することができます。もう一度改行が見つからない場合は、System#arraycopy()を使用してデータを左側に移動し、残りの部分を新しいデータでInputStream#read(byte []、int、int)で満たしてください。

でも注意してください。エンコード(ユニコードなど)によっては、1バイトが1文字である必要はありません。

関連する問題