Выбор направления в потоках c # - PullRequest
0 голосов
/ 03 декабря 2010

Некоторые потоки в c # имеют «направление» в том смысле, что они предназначены для использования в одном направлении. Для некоторых из них, таких как FileStream и NetworkStream, это имеет смысл, а для других нет.

Например, с помощью GZipStream вы можете сжимать или распаковывать данные, записывая их в поток в зависимости от параметров конструктора. CryptoStream, с другой стороны, перенаправляет зашифрованные данные на дальнюю сторону, где дешифрование переводится в операцию чтения, а шифрование - в операцию записи.

Особенно при работе с криптографическими реализациями. Вызывает раздражение принудительное продвижение данных в определенном направлении.

Есть ли какая-то особая мотивация для реализации некоторых потоков только в одном направлении?

Обновление: Чтобы прояснить, я ищу понимание того, почему некоторые проекты используют только одно направление, а не выбор направления. Кто-нибудь думал об этом раньше и нашел объяснение или, может быть, его нет.

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

В CryptoStream нет естественной зависимости от того, сколько байтов вы поместили в поток памяти и сколько байтов вы можете прочитать расшифрованными. Здесь вы должны принять во внимание конкретные детали реализации, такие как размер блока.

GZipStream может справиться с этим, изменив направление сжатия.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

дешифрование принуждается к операции чтения, а шифрование - к операции записи

Есть ли какая-то особая мотивация для реализации некоторых потоков только в одном направлении?

Ну, предположим, все было наоборот. Звучит разумно для расшифровки во время записи в файл, но данные все равно должны откуда-то приходить.

То есть вам понадобится Stream.CopyTo() и иногда MemoryStream. И эти инструменты вы можете использовать и сейчас.

Выбор может быть несколько произвольным, но вам нужно выбрать направление, и шифрование при написании кажется (на мой взгляд) наиболее естественным.

1 голос
/ 03 декабря 2010

Если вы думаете о CryptoStream как о контейнере для зашифрованного контента, становится очевидным, что sth.Вы хотите прочитать () из него должны быть расшифрованы и что-то.Вы пишете () в него должно быть зашифровано.

...