私が実装しているAPIは、階層構造のデータ、つまりネストされたブロックを含むInputStreamsを処理します。これには、リーフブロック内の多数の画像が含まれます。(知っておく必要がある場合は、私が解析しているのはCBEFFデータです。)データの各ブロックには、そのブロックに関するメタデータを含むヘッダーがプレフィックスとして付けられます。
1st level 1 header
1st level 2 header
1st level 2 data block
2nd level 2 header
2nd level 2 data block
2nd level 1 header
3rd level 2 header
3rd level 2 data block
元のInputStreamは、私のAPIクラスのコンストラクターへの引数であり、階層の下に渡されます。現在、APIクラスのコンストラクターで画像をバイト配列に読み込んでいるため、各コンストラクターは、そのクラスが担当する完全なデータを読み取りながらブロックし、後でクライアントがそのAPIクラスの関連するgetterメソッドを呼び出すと取得します。メモリから提供される画像データ。含まれている画像を何らかの怠惰なInputStreamの形式でAPIのクライアントに提供したいので、クライアントが結果のInputStreamのバイトを読み取った結果として元のInputStreamからのみ画像バイトが読み取られます。ゲッター。これにより、たとえば、プログレッシブレンダリングを実行できます。これは、元のInputStreamが遅いため便利です。
InputStreamsでこれを解決するエレガントな方法はありますか?