質問は一般的なものかもしれませんが、ここでの主な意味を理解しようとしています。ByteArrayInputStreamを使用して「正しい」マーク/リセット動作を行う危険性/保証
BCELライブラリを使用してバイトコードエンジニアリングを実行しようとしており、ワークフローの一部では、同じバイトコードファイルを複数回(最初から)読み込む必要があります。流れは次の通りです
// 1. Get Input Stream
// 2. Do some work
// 3. Finish
// 4. Do some other work.
手順4では、マークをリセットするか、ストリームを最初から取得する必要があります。私は以下の選択肢を知っています。
1)BufferedInputStream
を使用してストリームをラップ - 「マークを無効なリセット」取得のチャンスにIOException
2)するByteArrayInputStreamを使用して、それをラップ - それは常にいくつかのオンライン調査は、それが誤っだことを示唆しているにもかかわらず動作しますか?
3)ストリームからもう一度読む必要がある場合は、getInputStream()
に電話するだけです。
私はどちらのオプションが良いのか理解しようとしています。最後のmark
が呼び出された場所がないので、BufferedInputStreamを使用したくないので、より高いマーク位置にreset
を呼び出すとIOExceptionが発生します。 ByteArrayInputStreamを使用する方が好きですが、それは最低限のコード変更が必要ですが、誰かがオプション#2かオプション#3のどちらが良いかどうかを提案できますか?
JDKのByteArrayInputStream
とBufferedInputStream
では、mark()とreset()の実装が異なることがわかりました。
よろしく
ですから、基本的に '.class'ファイルになる' File'を読んでいますか?一度それを読んで、それをバイト配列に格納するのはなぜですか? – Eugene
@Eugeneはい私はすでにそれをやっています - それはうまくいきますが、私は信者または "専門家の意見"であり、私が考慮しなかった可能性のあるキャッチがあることを期待しています。あなたは何かを知っていますか? – ha9u63ar
入力ストリーム全体を読みたくない場合は、markとresetを使用することが重要です。または次に何をするかを知るために次の数バイトを読みたいと思っています。それ以外の場合は配列に読み込むのが最も簡単です(と私にとってはっきりしています) – Eugene