Записать сжатые данные в NetworkStream - PullRequest
1 голос
/ 24 января 2012

Я пишу простое клиент-серверное приложение и, просматривая документы MSDN, я наткнулся на несколько интересных типов потоков ...

http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

По-видимому, существует такая вещь, как сжатый поток! Естественно, это очень привлекательно, учитывая, что мы имеем дело с сетью. Однако, к сожалению, TcpClient.GetStream () возвращает только NetworkStream, а не сжатый поток в любой форме.

Мне было интересно, можно ли подключить сжатый поток для перенаправления в NetworkStream, то есть я мог бы записать сжатый поток, и этот поток записал бы свой сжатый вывод в мой NetworkStream. Мне также нужно знать, как сделать обратное, получить сжатый поток для чтения из NetworkStream.

С другой стороны, что вы рекомендуете делать - что предлагает самое быстрое сжатие, GZip или Deflate? И какая разница в сжатии между ними?

Ответы [ 2 ]

5 голосов
/ 24 января 2012

Это потоки-обёртки .
Вы можете создать GzipStream вокруг любого существующего потока для чтения или записи сжатых данных во внутренний поток.

0 голосов
/ 24 января 2012

Оформление заказа networkComms.net , библиотека связи с открытым исходным кодом, которая включает в себя возможность использования множества различных типов сжатия при отправке данных.Все, что вам нужно сделать, это изменить свойство NetworkComms.DefaultCompressor.Вы можете выбрать:

  1. Нет
  2. LZMA (низкая скорость, лучшее сжатие)
  3. GZip (хорошая скорость, хорошее сжатие)
  4. QuickLZ(Лучшая скорость, базовое сжатие)

Для поддержки этих и любых других методов сжатия networkComms.net использует базовый networkStream на базе и просто гарантирует, чтовсе было сжато до того, как оно достигло этой точки.

...