2016-05-05 14 views
0

Derzeit arbeite ich an der Entwicklung einer MemoryStream mit BinaryWriter.Hinzufügen eines einzelnen Bits in MemoryStream mit BinaryWriter

Ich habe mehrere Arten (z. B. Datentyp) von Daten, die ich in MemoryStream eins nach dem anderen lege.

und aus Gründen der Dynamik muss ich entscheiden, ob einige Datensätze in MemoryStream eingefügt werden sollen oder nicht und beim Lesen dieses MemoryStream sollte es entsprechend lesen.

zum Beispiel nehme ich Aufzeichnungen Einkommen Einfügen so Format von Aufzeichnungen sollte:

byte sr_No; double grandTotal;

aber wie in den meisten Fällen aus der sr_No in einer Reihe sein wird, es sei denn, holydays. also sollte ich keinen sr_no Teil von jedem Datensatz setzen. Stattdessen plane ich für eine single bit 0 für sr_Nr abwesend und 1 für das Datum vorhanden.

also im Grunde, was ich denke einen 1-Bit haben, wenn kommende Byte zeigen (wie sr_No Byte) ist enthalten sr_No oder direkt Grandtotal (als sr_No übersprungenen gewesen) wie diese

sr_No gegenwärtigen Situation :

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

sr_No abwesend Situation:

0[4 bytes of grandTotal]

aber es ist nicht möglich, also kann ich bitweises Verschieben auf MemoryStream (möglicherweise auch nicht möglich) machen, um einen Bit-Header zu haben.

oder es kann eine andere Möglichkeit, dies zu erreichen.

Antwort

3

so meine Frage wie kann ich schreiben und lesen (mit BinaryReader) einzelnes Bit zu/von MemoryStream?

Sie können nicht. Die kleinste "Einheit" von Daten in einem Stream ist ein Byte. Wenn Sie ein anderes Byte haben, von dem Sie nur 7 Bits verwenden, können Sie das zusätzliche Bit in dieses Byte einfügen, aber ansonsten müssen Sie nur ein ganzes zusätzliches Byte schreiben, um anzuzeigen, was noch vorhanden ist.

+0

kann ich ein bisschen weise Operation wie Verschiebung? Ich bin nicht sehr klar. Danke @ @ Jon Skeet – Amit

+0

@AmitNatural: Nun ja, Sie können Bit-Shifting tun - aber was würden Sie erwarten, dass zu erreichen? Was hat Sie dazu veranlasst, diese Frage zu stellen? –

+0

meine Grundvoraussetzung war, ein einzelnes Bit hinzuzufügen, da es nicht möglich ist, dass ich für die Lösung der Arbeit gehen muss. In meinem genauen Code gibt es einen Wertebereich (0-255 [Ich habe diesen Bereich so eingestellt, dass er in ein Byte passt, und ich kann ihn auf 0-127, 7 Bit Nummer und das rechte Bit in diesem für dieses Bit unbenutzten Byte richten Schaltvorgang.]). Aber wie gesagt, ich bin mir nicht sicher, ob Bitverschiebung auf MemoryStream möglich ist oder nicht! und wenn ja, wie kann ich es verwenden – Amit