Плюсы / минусы Stream [Читатель / Автор] - PullRequest
1 голос
/ 03 апреля 2012

Так что какое-то время я использовал StreamReader / Writer в качестве оболочки для NetworkStream TcpClient - в основном только для простоты и для экономии времени.

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

Это заставило меня задуматься, может быть, есть некоторые ненужные накладные расходы при использовании этих оболочек? или, возможно, проблемы совместимости при разработке клиентов на других языках, таких как C ++ или PHP.

Каковы последствия использования вспомогательных классов StreamReader и StreamWriter и есть ли какие-либо преимущества? (по линии обработки ошибок или чего-либо еще)

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

StreamReader / Writer позволяет вам легко сохранять / читать текстовые данные в / из потока. Там нет никаких дополнительных накладных расходов поверх того, для чего они предназначены - конвертировать значения в текстовое представление в правильной кодировке. Не должно возникнуть никаких проблем при использовании этого текстового потока из других языков, если обе стороны согласны с кодировкой - то есть одна из них по умолчанию UTF-8 с спецификацией.

«Предварительно добавленные посторонние байты» - это метка порядка байтов ( BOM ), которую можно отключить при создании считывателя (и только для кодировки Unicode UTF-8/7/16).

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

0 голосов
/ 03 апреля 2012

Я предполагаю, что вы используете ReadLine и WriteLine и видите противоречивые результаты.

Во-первых, StreamReader принимает символы UTF-8, которые могут не совпадать с тем, что отправляется с другой стороны.Вы можете установить кодировку при создании StreamReader.

Во-вторых, StreamReader предполагает, что строки заканчиваются на \ n, \ r или \ r \ n. Это означает, что если другой конец отправляет новую строку как \ n \ rэто вызовет странность.

В-третьих, Да, есть некоторые издержки для StreamReader, поскольку он должен буферизовать ввод для поиска новых строк.Но без этого гораздо труднее найти новую строку.

...