Frage

Ich habe eine Anwendung, die Daten sendet, die von einer Datenquelle auf meinem PC (SAY, Excel oder Access) auf einer empfangenden App auf einem Android-Tablet gesendet werden. Ich bin in der Testphase der Komprimierung der Daten, bevor es gesendet wird, und dann danach dekomprimieren, nachdem er empfangen wird. Ich benutze GZIP dafür, mit Dotnetzip auf der C # -Seite und der integrierten Gzipinputstream-Klasse auf der Java-Seite.

Ich habe Probleme, dass sie richtig funktionieren, um ordnungsgemäß zu arbeiten. Wenn ich einen Test nur auf einer Seite teste (Komprimieren und Dekomprimieren, um zu sehen, ob die Daten intakt bleiben), ist alles in Ordnung. Es funktioniert sowohl auf C # als auch auf Java. Wenn ich jedoch an den Punkt der zugesandten Daten komme, bin ich in dieses Problem geraten: "Unbekanntes Format (Magic Number EF1F)." Ich habe andere so viele Beiträge gesehen, wo dies diskutiert wurde, aber die Antworten scheinen nicht zu helfen.

Hier ist der Code, den ich verwende, um auf der C # -Seite zu komprimieren:

generasacodicetagpre.

Und hier ist der Code, den ich verwende, um auf der Java-Seite zu dekomprimieren. Da die Daten von einem Pufferredreader eingelesen werden, muss ich zunächst von char [] in Byte [] konvertieren:

generasacodicetagpre.

es wirft die Ausnahme, wenn ich versuche, den Gzipinputstream zu erstellen. Ich weiß bereits, wie ich die Nachricht von dem resultierenden dekomprimierten Puffer rekonstruiere, ist falsch (von der Prüfung auf der Java-Seite), aber das ist ein Problem, das ich zuerst erreichen muss! :) Jede Hilfe wäre dankbar. Ich vermute, dass es mit den Einstellungen der Komprimierungsstufe etwas zu tun hat; In C # benutze ich die Standardeinstellung, aber Afaik gibt es keine solche Einstellung auf der Java-Seite. Der Pufferredreader wird mit einer ASCII-Kodierung erstellt.

War es hilfreich?

Lösung

Da die Daten von einem PufferredReader eingelesen werden, muss ich zunächst von char [] in Byte [] konvertieren:

das ist ein riesiges problem.Sie haben die Daten komprimiert.Es sind willkürliche binäre Daten.Sie sollten absolut nicht nicht als Text behandeln.Es ist mir nicht klar, welcher NetMessage ist, aber im Grunde müssen Sie Zugriff auf die rohen Binärdaten, die Sie über das Netzwerk senden, auf den Zugriff auf die Roh-Binärdaten erhalten. Andernfalls haben Sie keine Chance, es zu dekomprimieren.

Andere Tipps

"Der Pufferreader wird mit einer ASCII-Kodierung erstellt."Dann ist es offensichtlich, dass Ihr Programm nicht funktionieren kann.GZIP-komprimierte Daten verwenden alle Bit der Bytes, sodass es also interpretiert, da ASCII Datenverlust verursacht.Außerdem konvertieren Sie die Zeichen wieder in ein Byte-Array, ohne eine Kodierung anzugeben, sodass die Standardeinstellung des Systems verwendet wird, der über die Steuerung Ihres Programms hinausgeht.Sie müssen für beide Konvertierungen dieselbe Kodierung verwenden, und es muss alle Informationen aller Bits behalten, z.Die Verwendung von ISO-Latin-1 würde den Job erledigen.Es wäre jedoch viel besser, diesen Fehler der Umwandlung von Bytes in Zeichen und Zurück zu Bytes zu reparieren.

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