Frage

Ich bin writting einen .Net / C # Client mit einem Java-Server unter Solaris.

Der Java Server Raw Byte Daten in einem Gziped Format writting, die wir extrahieren müssen, aber ich habe Probleme, die Daten in den richtigen Puffergrößen zu lesen. Ich las die Nachricht nicht-deterministicly unvollständig oder vollständig und kann nicht die zweite Nachricht in jedem Fall lesen. Ich bin die Bytes Lesen der Network Klasse mit der DataAvailable Eigenschaft.

Meine Vermutung ist, dass es zu einem kleinen / Big-Endian-Problem in Verbindung stehen könnte. Muss ich eine spezielle Konvertierung verwenden, um die Daten von großen zu kleinen Endian zu ändern? Muß ich das notwendige Bytes mit den gzip-Header lesen?

Ich benutzen den gleichen Server mit einem unkomprimierten Protokoll zu verwenden, bevor und hatte kein Problem, eine Stream mit der Readline-Funktion vor, aber das Protokoll war rein textbasiert.

Edit: Leider hat ich keine andere Wahl, als den Remote-Server und Protokoll gegeben. Ist der endiness Teil des GZIP-Format oder muss ich nur den Header entsprechend konvertieren? Die unkomprimierten Daten sind reiner UTF8-kodierten Strings mit der Linie als Trennzeichen bricht.

War es hilfreich?

Lösung

Das GZIP-Format ist nicht komplex. Es ist in seiner ganzen Pracht in einer einfachen, zugänglichen Spezifikation Dokument, IETF RFC 1952 .

Das GZIP-Format gibt die Bit-Reihenfolge für Bytes. Es ist nicht mit einer Fahne für endianness abstimmbar. Der Hersteller eines GZIP-Stream ist verantwortlich für die in dieser Hinsicht der Spezifikation entsprechen, und einem Verbraucher eines GZIP Strom ebenfalls.

Wenn ich das Debugging, würde ich auf dem Bytes sieht an beiden Enden des Drahtes und überprüfen, ob der Bytes in gehen ist die gleiche wie das Bytes herauskommen. Das ist genug, um die Endian-Fragen zur Seite legen.

Wenn Sie Erfolg haben keine GZIP Bytestrom übertragen, versuchen Testdaten zu übertragen - 16 Bytes 0xFF, gefolgt von 16 Byte 0xAA, etc etc. Und dann, stellen Sie sicher, dass diese die Daten ist das andere Ende herauskommt.

Es tut mir leid, ich weiß nicht, was Sie unter ich die Meldung nicht-deterministicly unvollständig oder vollständig gelesen und kann die zweite Nachricht in jedem Fall nicht lesen. Zweite Nachricht? Was zweite Nachricht? Die Endian sollte keinen Einfluss auf die Menge an Daten, die Sie erhalten.

Es fühlt sich an mir, dass Sie nicht das Vertrauen haben, dass Sie erfolgreich Daten übertragen werden. Ich würde vorschlagen, dass Sie überprüfen, dass vor der Arbeit an Endian Fragen und GZIP-Format Fragen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top