C# - Byte-Array Zu Lesen
Okay, ich bin Gebäude-server <-> client-Anwendung.
Grundsätzlich-server empfängt ein Paket enthält header[2bytes], cryptokeys[2bytes],und Daten
Ich dachte über die Gebäude-Klasse zum laden ganze Paket (byte[]) hinein und dann das Paket mit innen-Klasse Methoden. Nun zu der Frage. Was wäre die beste Herangehensweise? Ich muss in der Lage sein zu Lesen Int16 Int32 String(int Länge) und wahrscheinlich float
Edit: ein Bisschen wie binaryreader aber zum byte[] als Eingabe
InformationsquelleAutor jM2.me | 2011-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sagen
BinaryReader
ist Ihre beste Wahl. Aus den Erfahrungen der Vergangenheit gibt es Zeiten, wo Sie brauchen, um Erben von BinaryReader. Ein primäres Beispiel dafür ist, wenn Sie Lesen müssen, eine null-terminierte Zeichenfolge, weil die BinaryReader liest "length" -Präfix-strings. Oder Sie können eine eigene Klasse schreiben, aber am Ende hast du die gleiche Funktionalität bereitstellen, wie BinaryReader.Am Ende würde ich wahrscheinlich nur meine eigene Klasse. So, wenn Sie änderungen vornehmen müssen, wie Sie möchten, um die Daten zu extrahieren, können Sie einfach Bearbeiten Sie Ihre Klasse. Wenn Sie schreiben, das gesamte Projekt mit BinaryReader und feststellen, dass Sie benötigen, um Funktionalität hinzuzufügen, werden Sie geschraubt.
InformationsquelleAutor Marlon
Es ist ein
BitConverter
Klasse. Die statische Mitgliedern akzeptiert ein byte-array und eine Start-index und umwandeln der bytes an, die dem angegebenen Typ. Ist es genug?InformationsquelleAutor xanatos
Wenn es so einfach ist, dann
BinaryReader
über den Bach, oderBitConverter
direkt auf die Puffer ausreichen sollte; undEncoding
für Streicher. Aber Stimmen endianness erste 😉Wenn es mehr ist Komplex und Objekt-orientiert, dann schlage ich vor, mit einem pre-canned serializer. Eine vollständige schreiben serializer ist nicht trivial.
Möchten Sie vielleicht auch, um ein streaming-API eher als Belastung, die es alle in Erinnerung -, der neigt zu teuer für große Nachrichten.
InformationsquelleAutor Marc Gravell
Warum nicht einen Stream, zum Beispiel ein NetworkStream?
InformationsquelleAutor KeithS