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