3

ストリームを入力パラメーターとして受け取り、それを処理 (読み取り) するサードパーティ 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 に圧縮できたので、圧縮することは良い考えだと思います。

4

1 に答える 1

1

DotNetZipの ZlibStreamを使用します。zlib はストリーム圧縮用に設計されています。

于 2013-05-07T14:41:19.610 に答える