Никак не могу понять как работают BinaryReader
и BinaryWriter
? Зачем в конструктор передаётся true
, написано "чтобы при необходимости поток оставался открытым", что это означает?
При какой необходимости поток должен оставаться открытым?
Как вообще осуществляется передача строки в BinaryWriter
? Если я правильно понял, то через BinaryWriter
отправляется, что-то вроде массива типа Byte
, то есть каждый символ кодируется как набор 0-й и 1-ц и добавляется в массив и пока не будет достигнут конец сообщения, данные будут отправляться.
reader = new BinaryReader(stream, Encoding.Unicode, true);
writer = new BinaryWriter(stream, Encoding.Unicode, true);
Также не понятно как работает метод BinaryReader.ReadString()
? Как я понял он получает длину строки, потом саму строку. То есть декодирует массив типа Byte
в указанную кодировку и сразу записывает декодированные символы в строку, до тех пор пока он не достиг конца строки, и если отправка сообщения приостановлена, то он будет ждать пока она не возобновиться.
На msdn сказано, что "метод BinaryReader.ReadString ()
считывает число блоками по 7 бит", это значит он получает число и делит его на блоки по 7 бит?
Сразу же возникают другие вопросы: зачем он делит число на блоки по 7 бит, какой тип данных передаётся в BinaryReader.ReadString ()
? Я думаю, что передаётся массив типа Byte
то есть само сообщение, а перед ним некое число типа Int32
- длина строки.
Класс BinaryWriter
реализует интерфейс IDisposable
. Передавая в конструктор true
в качестве последнего параметра можно задать, будет ли писатель закрыт при вызове IDisposable.Dispose
.
Что касается "число блоками по 7 бит", то это имеется ввиду используемый в этих читателях/писателях способ сжатой записи для int
:
Такой подход позволяет экономить место при записи коротких чисел. Например для записи числа 127 потребуется тольк 1 байт вместо 4, для 1257 потребуется 2 байта. Однако при этом получается оверхед для больших чисел, да и запись / чтение производится медленее.
Перед строкой записывается ее длинна в такой упакованной форме, а затем содержимое строки как есть.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача: Нужно сделать ВК бота который будет делать рассылку сообщенийРеализация на ASP
Как правильно настроить плагин "Spell Check" в Atom, чтобы он корректно проверял правописание? Я добавил флаги в настройки грамматики :
Подскажите, как перебрать массив auto и в зависимости от значения item вернуть в result определенное значение?