2015-12-18 2 views
6

Размер каждого символа в ASCII (StreamWriter) принимает 1 байт ли его число или символ.Размер шрифта при записи в BinaryWriter

Как будет выглядеть размер каждого символа, целое число в двоичном формате? (BinaryWriter). Может кто-нибудь объяснить вкратце?

+0

'sizeof (char) == 2', поэтому один символ - * 2 байта * длинный; однако размер 'Stream' зависит от кодировки (Ascii, UTF-8 и т. д.) и самих символов:' aaa' (3 английских буквы 'a') может быть короче' ааа' (3 * русских * буквы 'а ') –

+0

« char' в C# является UTF-16, это означает, что каждый символ занимает 2 байта. Межстрановый тип зависит от его размера, то есть он может быть либо одним байтом ('Byte'), либо коротким (16 бит),' int' (32Bit), 'long' (64 бит). –

+1

Почти (но не совсем) каждый раз, когда я вижу, что кто-то использует 'BinaryWriter', они используют его по причинам, которые плохо рассматриваются. Что вам нужно делать здесь? Будет ли лучший выбор для двоичного сериализатора? (есть несколько на выбор) –

ответ

1

Начнем с разницы между StreamWriter и BinaryWriter. StreamWriter предназначен для записи текстового представления в поток. StreamWriter преобразует все, что записано (через метод Write *) в строку, затем преобразует через кодировку в байты и записывает байты в базовый поток.

BinaryWriter предназначен для записи сырых «примитивных» типов данных в поток. Для числовых типов он принимает представление в памяти, выполняет некоторую работу по нормализации представления (например, для обработки различий в endianess), а затем записывает байты в базовый поток. Обратите внимание, что он также имеет кодировку, предоставленную в конструкторе. Это используется только для преобразования char и string в байты. Кодировка по умолчанию - UTF8.

Размер каждого символа в ASCII (StreamWriter) принимает 1 байт, является ли его числом или символом.

Это заявление несколько сбивает с толку. Позвольте пояснить. int 1 будет преобразован в строку «1», которая кодирует в ASCII как 49, который действительно является одним байтом, но 100 будет преобразован в строку «10000», которая кодирует ASCII до 49 48 48 48 48, так что это 5 байт , Если использование BinaryWriter будет занимать 4 байта (размер int).

Как будет выглядеть размер каждого символа, целое число в двоичном формате? (BinaryWriter). Может кто-нибудь объяснить вкратце?

Размер char зависит от кодирования, используемого для обоих BinaryWriter и StreamWriter. Размер числовых типов, таких как int, long, double - это размеры базовых типов, 4, 8 и 8 байтов соответственно. Количество записанных данных задокументировано в каждом Write overload BinaryWriter. Строки обрабатываются отчетливо от char[] в BinaryWriter и будут иметь префикс их длины до того, как будут записаны закодированные байты.