2

ファイルの ascii 部分を解析しようとして問題が発生しました。終了タグに到達すると、すぐにその時点からバイトの読み取りが開始されます。Java で行または単語全体を読み取るために知っていることはすべて、バッファーを作成します。これにより、停止ポイントの直後にバイトを取得する可能性が失われます。これをバイト単位で読み取り、改行を見つけ、改行の前にすべてを再構築し、それが私の終了タグかどうかを確認し、そこから移動する唯一の方法はありますか?

4

5 に答える 5

2

「線」という概念を捨てるのが一番だと思います。終了タグを見つけるには、終了タグを含めるのに十分な大きさのリング バッファーを作成し、バイト単位で読み取り、各バイトの後にタグが含まれているかどうかを確認します。

より洗練された効率的な検索アルゴリズムがありますが、その違いは検索語が長い場合にのみ関連します (おそらく終了タグが短いと思われます)。

于 2009-08-27T14:25:34.263 に答える
2

それは可能ですが、私が知る限り、API のクラスではありません。

手動で行うことができます - /をサポートするBufferedInputStreamとして開きます。ブロックごとに読み取り ( )、ASCII として解析します。最終的には、マーカーに到達するまでバッファに蓄積します。しかし、あなたが電話する前に。ASCII で必要なすべてを読み取ったと思われる場合は、を呼び出してから、残りの ASCII 部分をダンプするためにを呼び出します。これで、ファイルのバイナリ部分を読み取る準備ができました。markresetbyte[]readmarkresetreadBufferedInputStreamInputStream

于 2009-08-27T14:23:47.447 に答える
1

このファイルの大きさは?私の最初の考えは、すべてを処理しようとせずに ByteBuffer または ByteArrayOutputStream に読み込み、バイト値を比較してタグを見つけることです。テキスト部分の終了位置とバイナリ部分の開始位置がわかったら、各部分を適切に処理します。

于 2009-08-27T17:52:26.577 に答える
0

ファイルは大きくなっていますか、それとも静的ですか?

静的な場合は、http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.htmlを参照してください。

于 2009-08-27T22:37:57.000 に答える
0

うん、あなたはバイトごとに正しいです。抽象化には欠点があります。

于 2009-08-27T14:19:47.673 に答える