2016-05-05 13 views
0

В настоящее время я работаю над разработкой MemoryStream с использованием BinaryWriter.Добавление одного бита в MemoryStream с использованием BinaryWriter

У меня есть несколько типов (например, тип данных) данных, которые я помещаю в MemoryStream один за другим.

и для динамичности мне нужно решить, нужно ли вставлять некоторые записи в MemoryStream или нет, и, читая этот MemoryStream, он должен читать соответственно.

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

byte sr_No; double grandTotal;

, но как и в большинстве случаев от sr_No будет находиться в строке, если выходным дням. , поэтому я не должен поместить sr_No в каждую запись. Вместо этого я планирую получить single bit 0 для sr_No отсутствует и 1 для даты.

поэтому в основном то, что я имею в виду иметь 1 бит, который будет отображаться, если наступающий байт (как sr_No является байт), содержащий sr_No или непосредственно GrandTotal (как sr_No была пропущена) как этот

sr_No нынешней ситуации :

1[1 byte of sr_No][4 bytes of grandTotal]

sr_No отсутствует ситуация:

0[4 bytes of grandTotal]

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

или может быть любым другим способом его достижения.

ответ

3

так что мой вопрос, как я могу писать и читать (используя BinaryReader) один бит в/из MemoryStream?

Вы не можете. Самый маленький «блок» данных в потоке является байтом. Если у вас есть еще один байт, в котором вы используете только 7 бит, вы можете включить дополнительный бит в этот байт, но в противном случае вам просто нужно написать целый лишний байт, чтобы указать, что еще присутствует.

+0

Могу ли я немного поразмыслить, как переключение ?? Я не очень понимаю. спасибо, кстати @Jon Skeet – Amit

+0

@AmitNatural: Ну да, вы можете делать бит-сдвиги - но чего бы вы ожидали этого? Что побудило вас задать этот вопрос? –

+0

моим основным требованием было добавить один бит, поскольку это невозможно. Мне нужно идти на работу вокруг решения. в моем точном коде есть значение ranged (0-255 [Я сделал этот диапазон, чтобы поместить его в байт, и я могу привести его в порядок до 0-127, 7 бит и сделать самый правый бит в том, что байт не используется для этого бита смещение работа.]). но, как я уже сказал, я не понимаю, возможно ли смещение бит на MemoryStream или нет! и если да, то как я могу его использовать – Amit