6 Stimmen

Schreiben Sie ein Int-Array in einen Stream in .NET

Wie schreibe ich am besten die binäre Darstellung eines int-Arrays (Int32[]) in einen Stream?

Stream.Write akzeptiert nur byte[] als Quelle und ich möchte die Konvertierung/Kopie des Arrays in ein byte[] vermeiden (stattdessen direkt vom 'ursprünglichen Ort' streamen).

In einer systemorientierteren Sprache (z.B. C++) würde ich einfach das int-Array in ein byte* umwandeln, aber soweit ich verstanden habe, ist dies in C# nicht möglich (und außerdem würde auch das Umwandeln von byte* in byte[] nicht funktionieren)

Danke

Martin

PS: Eigentlich möchte ich auch einzelne int-Werte streamen. Erstellt BinaryConverter.GetBytes() ein neues Byte-Array? In diesem Fall erweitere ich meine Frage, wie man einzelne int-Werte effizient streamen kann ...

13voto

Jon Skeet Punkte 1325502

Die einfachste Option wäre die Verwendung von BinaryWriter, der Ihren Ausgabestrom umschließt, und Write(int) für jeden Ihrer int-Werte aufruft. Wenn das nicht die richtige Endianness für Sie verwendet, könnten Sie EndianBinaryWriter aus meiner MiscUtil-Bibliothek verwenden.

Ich kenne nichts Eingebautes, um dies effizienter zu tun... Ich würde hoffen, dass der Puffer innerhalb des Stroms dies größtenteils erledigt.

3voto

Steve Townsend Punkte 52288

System.Array und System.Int32 haben beide das SerializableAttribute und unterstützen daher beide die Standardserialisierung in einem abrufbaren Format.

http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx

Es gibt Beispielscode für die binäre Ausgabe und das Rücklesen hier:

http://msdn.microsoft.com/en-us/library/aa904194(VS.71).aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X