das verwirrt mich wirklich, sagen, ich mag eine ganze Zahl in eine Datei speichern, int x = 56, nimmt die Binary den ascii-Äquivalent der Darstellung von 56 in Speicher 00000000 00000000 00000000 00111000, das wäre: null null null 8 und schreibe es in die Datei? hab ich recht? Kann jemand erklären, wie diese zwei Funktionen funktionieren und wann sollte ich sie benutzen? Ich benutze C# BTW. Danke im Voraus!Was ist der Unterschied zwischen einem Streamwriter und einem Binarywriter?
Antwort
StreamWriter
ist für Text und BinaryWriter
schreibt die tatsächliche binäre Darstellung von dem, was Sie schreiben möchten. Ich bin mir nicht 100% sicher, aber fast :).
Der binäre Writer schreibt die In-Memory-Binärdarstellung der Ganzzahl. Der Stream Writer schreibt die ASCII-Darstellung. Im Allgemeinen kann ersteres kompakter und effizienter sein (man denke an das Schreiben der ganzen Zahl 23861398 - der binäre Schreiber würde 4 Bytes benötigen, aber der Stromschreiber würde 8, 16 oder sogar 32 abhängig von der Kodierung benötigen), aber letzteres ergibt einfach alter Text.
Aus den MSDN-Seiten für StreamWriter und BinaryWriter Sie können sehen, die Unterschiede deutlich:
Stream:
Implementiert eine Textwriter Zeichen in einen Stream in einer bestimmten Codierung für das Schreiben.
Und:
Binary:
Schreibt primitive Typen in Binär einen Strom und unterstützt Strings in eine spezielle Codierung zu schreiben.
Der erste schreibt Dinge wie Text, der zweite in binärer schreibt, little endian, so würde int x = 56
00111000 00000000 00000000 00000000
geschrieben werden.
Von dem, was ich erkennen kann ... Stream ist für Text und Binary ist für primitive Typen, einschließlich Folgen von speziellen Kodierungen. Zu sagen, dass der BinaryWriter binär schreibt, ist für Leute, die Dinge für bare Münze nehmen, irgendwie irreführend ... wie ich es getan habe. Ich nahm an, dass, wenn ich eine Ganzzahl in den zugrunde liegenden Stream schreibe, würde es tatsächlich in Binärdatei schreiben und ich könnte es wieder als ein Strom von 1 und 0's lesen. Um die Dinge hinstellen, wie es in Code aussieht:
MemoryStream stream = new MemoryStream();
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(35);
// is equivalent to doing:
stream.Write(BitConverter.GetBytes((int)35), 0, 4);
Obwohl das Binary Bit verwendet Verschieben des Bytes zu extrahieren und BitConverter verwendet unsichere Zeiger Gießen, das Ergebnis ist das gleiche. Ein Int ist 32 Bit oder 4 Byte lang, und alles, was es einfach tut, schreibt die Bytes, die dieses Int darstellen, in seinen zugrunde liegenden Stream.
Stream macht das Gleiche, nur dass es für Text gemeint ist, also ganze Zahlen werden nicht an Bytes umgewandelt werden, sondern zu chars ... das ist zum Schreiben ähnlich:
byte[] buffer = Encoding.UTF8.GetBytes("my string here 1234");
stream.Write(buffer, 0, buffer.Length);
Deshalb habe ich sagte es ist irreführend zu sagen, es schreibt in Binärdatei .. weil es technisch ist. Zerlegen Sie jedes geschriebene Byte in Bits und Sie erhalten die Binärwerte. Es wäre jedoch sinnvoller zu sagen, dass primitive Typen als Byte-Arrays geschrieben werden.Wenn Sie den Stream in eine Zeichenfolge konvertieren würden, würden Sie keine Zeichenfolge von 1 und 0 erhalten.
- 1. Was ist der Unterschied zwischen einem Index und einem Fremdschlüssel?
- 2. Was ist der Unterschied zwischen einem RoutedCommand und einem RoutedUICommand?
- 3. Was ist der Unterschied zwischen einem Muster und einem Pfad?
- 4. Was ist der Unterschied zwischen einem Primärschlüssel und einem Ersatzschlüssel?
- 5. Was ist der Unterschied zwischen einem Integrator und einem Tiefpassfilter?
- 6. Was ist der Unterschied zwischen einem Controller und einem Service?
- 7. Was ist der Unterschied zwischen einem Anwendungscontroller und einem Anwendungskontext?
- 8. Was ist der Unterschied zwischen einem Key und einem KeySpec?
- 9. Was ist der Unterschied zwischen einem Domänenklassendiagramm und einem Designklassendiagramm?
- 10. Was ist der Unterschied zwischen einem Tupel und einem compressed_pair?
- 11. Was ist der Unterschied zwischen einem Klassendiagramm und einem Objektdiagramm?
- 12. Was ist der Unterschied zwischen einem Iterator und einem Generator?
- 13. Was ist der Unterschied zwischen einem Array und einem Objekt?
- 14. Was ist der Unterschied zwischen einem Tabellenindex und einem Ansichtsindex?
- 15. Was ist der Unterschied zwischen einem Algorithmus und einem Entwurfsmuster
- 16. Was ist der Unterschied zwischen einem Nanokern und einem Exokernel?
- 17. Was ist der Unterschied zwischen einem Helfer und einem Teil?
- 18. Was ist der Unterschied zwischen einem Workflow und einem Flowchart?
- 19. Was ist der Unterschied zwischen einem Instanzinitialisierer und einem Konstruktor?
- 20. Was ist der Unterschied zwischen einem ViewModel und einem Controller?
- 21. Was ist der Unterschied zwischen einem Bündel und einer Absicht?
- 22. Was ist der Unterschied zwischen Ember.computed.alias und einem Ember.binding?
- 23. Was ist der Unterschied zwischen einem Mixin und dem Dekorationsmuster?
- 24. Was ist der Unterschied zwischen einem QWindow und QWidget
- 25. Was ist der Unterschied zwischen einem URI und einer URL?
- 26. Was ist der Unterschied zwischen einem Algorithmus und einer Funktion?
- 27. Was ist der Unterschied zwischen einem Fehler und einer Ausnahme?
- 28. Was ist der Unterschied zwischen einem Benutzer und einer Rolle?
- 29. Was ist der Unterschied zwischen einer Schließung und einem Modul?
- 30. Was ist der Unterschied zwischen einem Ausdruck und einer Aussage?
Das ist die binäre Darstellung, nicht ASCII. –
00111000 = 0 * 1 + 0 * 2 + 0 * 4 + 1 * 8 + 1 * 16 + 1 * 32 + 0 * 64 + 0 * 128 = 56. –
Es ist nicht NULL NULL NULL 8 seine 0 0 0 56 - In einer Binärdatei gibt es keinen NULL. ASCII und seine Ersetzungen codieren NULL als Nullbyte – Adrian