ストリームを入力パラメーターとして受け取り、それを処理 (読み取り) するサードパーティ API メソッドがあります。私が与えているストリームは潜在的に非常に巨大です (つまり、メモリに収まりません)。このストリームを取得して、メソッドがストリームを読み取るときにオンザフライで圧縮を行う圧縮ストリームにラップしたいと思います。
それができるライブラリはありますか?圧縮は超効率的である必要はなく、ZIP のようなもので十分です。
例:
using (var data = File.OpenRead(...))
{
using (var pack = new PackStream(data))
{
3rdPartyApiMethod(pack);
}
}
void 3rdPartyApiMethod(Stream s)
{
// process the stream until EOF
// "while(true) s.Read"
}
したがって、理論的には、基になるストリームからデータPackStream
を読み取り(可能な限り少なく)、パックして、要求した人に返す必要があります。
コメントに基づく更新 (全文は以下を参照):
メソッドが行っているのは、データをブロック単位で読み取り、各ブロックをサーバーにアップロードすることです。一つずつ。そこに収納するだけです。私のファイルはブロックより約 100 倍大きく、単純な ZIP 圧縮でもファイルを 1/10 に圧縮できたので、圧縮することは良い考えだと思います。