2015-12-18 13 views
6

Die Größe jedes Zeichens in ASCII (StreamWriter) dauert 1 Byte, ob es eine Zahl oder ein Zeichen ist.Größe der Typen beim Schreiben in BinaryWriter

Ähnlich wie wird die Größe jedes Zeichens, Integer in Binär? (BinaryWriter). Kann jemand kurz erklären?

+0

'sizeof (char) == 2', also einzelnes Zeichen ist * 2 Bytes * lang; die Größe von 'Stream' hängt jedoch von der Codierung (Ascii, UTF-8 usw.) und den Zeichen selbst ab:' aaa' (3 englische Buchstaben 'a') kann kürzer sein als' ааа' (3 * russische * Buchstaben 'a ') –

+0

Ein' char' in C# ist UTF-16, dh jedes Zeichen benötigt 2 Bytes. Ein Integral-Typ hängt von seiner Größe ab, was bedeutet, dass er entweder ein einzelnes Byte ("Byte"), ein "Short" (16 Bit), "Int" (32 Bit), "Long" (64 Bit) sein kann. –

+1

Fast (aber nicht immer) jedes Mal, wenn ich sehe, dass jemand 'BinaryWriter' benutzt, benutzen sie es aus schlecht überlegten Gründen. Was musst du hier machen? Wäre ein binärer Serializer eine bessere Wahl? (es gibt mehrere zur Auswahl) –

Antwort

1

Beginnen wir mit dem Unterschied zwischen StreamWriter und BinaryWriter. StreamWriter dient zum Schreiben einer Textdarstellung in einen Stream. StreamWriter konvertiert alles, was geschrieben wird (via Write * method) in eine Zeichenfolge, konvertiert sie dann über die Codierung in Bytes und schreibt die Bytes in den zugrunde liegenden Stream.

BinaryWriter ist zum Schreiben von rohen "primitiven" Datentypen in einen Stream. Bei numerischen Typen wird die In-Memory-Repräsentation benötigt, bei einigen wird die Repräsentation normalisiert (z. B. um Unterschiede in der Endianität zu behandeln), und dann werden die Bytes in den zugrunde liegenden Stream geschrieben. Beachten Sie, dass es auch eine Codierung im Konstruktor zur Verfügung gestellt hat. Dies wird nur zum Konvertieren von char und string in Byte verwendet. Die Standardcodierung ist UTF8.

Größe jedes Zeichens in ASCII (StreamWriter) dauert 1 Byte, ob es eine Zahl oder ein Zeichen ist.

Diese Aussage ist etwas verwirrend für mich. Lass mich das klären. Die int 1 wird in die Zeichenfolge "1" konvertiert, die in ASCII als 49 codiert, die tatsächlich ein Byte ist, aber 100 wird in die Zeichenfolge "10000" umgewandelt, die in ASCII zu 49 48 48 48 48 codiert, also 5 Bytes . Bei Verwendung von BinaryWriter würden beide 4 Bytes belegen (die Größe eines int).

Ähnlich wie wird die Größe jedes Zeichens, Integer in Binär? (BinärWriter). Kann jemand kurz erklären?

Die Größe eines char hängt von der Codierung verwendet sowohl für BinaryWriter und StreamWriter. Die Größe der numerischen Typen wie int, long, double sind die Größen der zugrunde liegenden Typen, 4, 8 bzw. 8 Byte. Die Menge der geschriebenen Daten ist in jedem Write overload von BinaryWriter dokumentiert. Strings werden in BinaryWriter eindeutig von char[] behandelt und ihre Länge wird vorangestellt, bevor die codierten Bytes geschrieben werden.