Serialisierung von java.util.Date

8

Weiß jemand, wie ein java.util.Date serialisiert wird? Ich meine, erklären Sie mir genau, was jedes Byte ist? Ich habe versucht, ein langes und ein Datum zu schreiben, und ich kann Matches sehen, aber es gibt andere Charaktere, die ich einfach nicht bekomme.

Unsere Anwendung nimmt Serveranforderungen mit Daten vor, was bedeutet, dass sie von Client zu Server serialisiert werden. Das Team, das Stresstests durchführt, verwendet ein Tool, das diese Anforderungen erfasst und modifiziert, das Problem ist, dass sie Daten verarbeiten möchten und ich nicht weiß, wie der Byte-Stream zu interpretieren ist. Der Typ, mit dem ich spreche, scheint bereit zu sein zu lernen, aber bis jetzt habe ich nichts gefunden, von dem ich verstehe, dass er ihn darauf hinweist ...

Code, den ich verwendet habe:

%Vor%

BEARBEITEN:

Die Ausgabe von oben ist:

%Vor%

Das lange ist "w, áqÇ-" also, was ist das Zeug zwischen dem langen und dem Date-Objekt, d. h. "hjKYt xp"

HINWEIS einige der Leerzeichen sind nicht druckbare Zeichen NULL, SOH, Rücktaste usw. Ich verstehe, dass es der hex Wert ist, der zählt.

BEARBEITEN:

Immer noch Probleme. Aus irgendeinem Grund serialisiert die serialisierte HTTP-Anfrage das Datum nicht genau wie die Antwort, die ich akzeptierte. Sehr nah, aber immer noch anders und ich weiß nicht warum. Was noch seltsamer ist, wenn ich ein Datum einfach serialisiere, scheint es gut zu funktionieren. FYI at worj wir verwenden Websphere 6.1 Hier sind einige Beispiele für das, was in der Anfrage gesendet wird:

%Vor%

Ich konnte die meisten Felder identifizieren, aber nicht die tatsächliche Zeit! ZB die serialVersionUID ist hj\x81\x01KYt\x19

BEARBEITEN (FINAL):

Ich fand das Datum, aber es war nicht in der Nähe, wo ich es erwartet hatte! Es war gut nach der Probe, die ich hatte, weil andere Datenfelder auftauchten. Ich dachte, dass das Datum fertig war - es war nur Zufall, dass ich das hexadezimale Muster des Datums bemerkte, nach dem ich suchte! Beispiel:

%Vor%

Der Datumswert ist genau am Ende!

    
BigMac66 13.12.2010, 20:29
quelle

2 Antworten

5
%Vor%

daher ist es der lange Wert, der den Offset vom 1. Januar 1970 00:00:00 GMT in Millisekunden darstellt.

EDIT: Dies ist jedoch durch einige Header vorangestellt und gefolgt von:

%Vor%     
pstanton 13.12.2010, 20:39
quelle
8

Die Details zum Format der Java-Objektserialisierung sind in Java Object Serialization angegeben Spezifikation Anders als Zauber- und Versionsnummern werden Details der Klasse Date und die Tatsache, dass das Objekt Date ist, in den Stream geschrieben.

Das API-Dokument für Date serialisiertes Formular ist:

  

Der von getTime () zurückgegebene Wert ist   emittiert (lang). Dies repräsentiert die   Versatz vom 1. Januar 1970, 00:00:00 Uhr   GMT in Millisekunden.

Beachten Sie, dass es die Spezifikation tatsächlich bricht, indem Sie defaultWriteObject oder putFields nicht aufrufen.

    
Tom Hawtin - tackline 13.12.2010 20:42
quelle

Tags und Links