暗号化されたバイト ストリーム (おそらく非常に大きなもの)を入力として受け取り、多かれ少なかれ同じ形式の出力を生成するインターフェイスを開発しています。
入力形式は次のとおりです。
{N byte envelope}
- encryption key IDs &c.
{X byte encrypted body}
出力形式は同じです。
これが通常のユースケースです(もちろん、かなり擬似コード化されています):
Message incomingMessage = new Message (inputStream);
ProcessingResults results = process (incomingMessage);
MessageEnvelope messageEnvelope = new MessageEnvelope ();
// set message encryption options &c. ...
Message outgoingMessage = new Message ();
outgoingMessage.setEnvelope (messageEnvelope);
writeProcessingResults (results, message);
message.writeToOutput (outputStream);
私には、同じオブジェクトを使用してこの動作をカプセル化することは理にかなっているように思えますが、これをどのように行うべきかについて少し途方に暮れています。一度にすべての暗号化された本文を読み込むのは現実的ではありません。それをストリーミングできるようにする必要があります (そのため、ある種の入力ストリーム フィルターを使用して暗号化を解除します) と同時に、このオブジェクトの新しいインスタンスを書き出すことができる必要があります。この作業を行うための良いアプローチは何ですか? Message
内部的にはどのように見えるべきですか?