0

データを読み取る前に、ストリームに Offset を設定できる汎用の再利用可能なクラスを実装したいと思います。理想的には、これがすべての InputStream で機能することを望みます。これにより、異なるソースから取得するときに、それらをすべてラップする必要がなくなります。

SO でPositionInputStreamに関する解決策を見つけましたが、それはまさに私が望むものではありません。Offset InputStream の既存の実装を推奨できる人はいますか?

4

1 に答える 1

1

最後に、すべての実装はせいぜい最初の「オフセットバイト」を読み取るが、
これをユーザーに提示せず
、読み取りバイトであると予想されるものをユーザーに返すと思います。

たとえば、インフラストラクチャがデコレーターパターンに基づいており、「ラップされた」InputStream をメンバーとして保持しているとします。

read メソッドのコード (オフセットと長さのパラメーターを使用) は、多かれ少なかれ次のようになります。


public int read(byte[] b,
                int off,
                int len)
         throws IOException {
    innerInputStream.read(b,off,len);
}


InputStreamDecorator d = new InputStreamDecorator(new FileInputStream("myfile.txt"));

スキップのラッピング実装も可能です。
スキップするバイト数の引数を持つ CTOR を持つことを決定できます。この CTOR は内部スキップ メソッドを呼び出します。
例えば:

public class InputStreamDecorator extends InputStream {
   public InputStreamDecorator(InputStream is, long toSkip) {
      this.internalStream = is;
      is.skip(toSkip);
   }
}
于 2012-10-31T11:32:41.567 に答える