Подтвердить что ты не робот

Какая разница между потоковедателем и бинарным комментарием?

это действительно смущает меня, скажем, я хочу сохранить целое число в файл, int x = 56, бинарный журнал принимает ascii-эквивалент представления 56 в памяти 00000000 00000000 00000000 00111000, который будет: null null null 8 и записать его в файл? я прав? может кто-нибудь объяснить, как эти две функции и когда я должен использовать каждый из них? im, используя С# btw. спасибо заранее!

4b9b3361

Ответ 1

На страницах MSDN для StreamWriter и BinaryWriter вы можете четко видеть различия:

StreamWriter:

Реализует TextWriter для записи символов в поток в определенном кодирование.

и

BinaryWriter:

Записывает примитивные типы в двоичном виде на поток и поддерживает записи строк в специфическое кодирование.

Первый пишет вещи как текст, второй пишет в двоичном формате, little endian, поэтому int x = 56 будет записано 00111000 00000000 00000000 00000000.

Ответ 2

Двоичный писатель записывает двоичное представление в памяти целого числа. Писатель потока записывает представление ASCII. Вообще говоря, первый может быть более компактным и эффективным (рассмотрим возможность записи целого числа 23861398 - бинарный писатель потребует 4 байта, но писателю потока потребуется 8, 16 или даже 32 в зависимости от кодировки), но последнее приводит к простому старый текст.

Ответ 3

Из того, что я могу различить... StreamWriter больше подходит для текста, а BinaryWriter - для примитивных типов, включая строки конкретных кодировок. Говоря о том, что BinaryWriter пишет в двоичном коде, однако, он вводит в заблуждение людей, которые берут вещи по номиналу... как и я. Я предположил, что когда я пишу целое число в базовый поток, он фактически записывал бы его в двоичном формате, и я мог бы читать его снова как поток 1 и 0. Положить вещи, как это выглядит в коде:

MemoryStream stream = new MemoryStream(); 

BinaryWriter bw = new BinaryWriter(stream);

bw.Write(35);

// is equivalent to doing:

stream.Write(BitConverter.GetBytes((int)35), 0, 4);

Хотя BinaryWriter использует смещение битов для извлечения байтов, а BitConverter использует небезопасное кастинг-указатель, результат тот же. Int - 32 бита или 4 байта в длину, и все, что он просто делает, - это записи байтов, которые представляют этот int для него, лежащего в основе потока.

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

byte[] buffer = Encoding.UTF8.GetBytes("my string here 1234");
stream.Write(buffer, 0, buffer.Length);

Вот почему я сказал, что вводить в заблуждение, чтобы сказать, что он пишет в двоичном формате.. потому что он делает.. технически. Разбейте каждый записанный байт на биты, и вы получите двоичные значения. Однако было бы разумнее сказать, что он пишет примитивные типы в виде массивов байтов. Если вы должны были преобразовать поток в строку, вы бы не получили строку из 1 и 0.

Ответ 4

StreamWriter для текста и BinaryWriter записывает фактическое двоичное представление того, что вы хотите записать. Я не уверен на 100%, но почти:).