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.Serialisierung java.util.Date
Unsere Anwendung macht Server-Anfragen mit Daten, was bedeutet, dass es von Client zu Server serialisiert wird. 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 ich spreche zu scheint bereit zu lernen, aber bisher habe ich nichts gefunden, das verstehe ich ihn Punkt zu ...
Code I verwendet:
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try
{
fos = new FileOutputStream("t.tmp");
oos = new ObjectOutputStream(fos);
Date today = new Date();
oos.writeLong(today.getTime());
oos.writeObject("Today");
oos.writeObject(today);
oos.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
EDIT:
die Ausgabe aus dem oben ist:
"¬í w ,áqÇ-t Todaysr java.util.DatehjKYt xpw ,áqÇ-x"
die lange ist „w, áqÇ-“ so was ist der Stoff, zwischen dem langen und dem Date-Objekt, das heißt „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.
EDIT:
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. Zu Ihrer Information bei worj verwenden wir Websphere 6.1 Hier einige Beispiele von dem, was in der Anfrage gesendet wird:
lr_start_transaction("20000101");
\\x0Ejava.util.Datehj\\x81\\x01KYt\\x19\\x03\\x00\\x00xpw\\x08\\x00\\x00\\x01,\\xE10\\x0BXxt\\x00\\x08
lr_start_transaction("20000102");
\\x0Ejava.util.Datehj\\x81\\x01KYt\\x19\\x03\\x00\\x00xpw\\x08\\x00\\x00\\x01,\\xE10>\\x9Dxt\\x00\\x08
lr_start_transaction("20000103");
\\x0Ejava.util.Datehj\\x81\\x01KYt\\x19\\x03\\x00\\x00xpw\\x08\\x00\\x00\\x01,\\xE10z\\xDBxt\\x00\\x08
konnte ich die meisten Felder identifizieren, aber nicht die tatsächliche Zeit! die serialVersionUID z.B ist hj\\x81\\x01KYt\\x19
EDIT (FINAL):
ich das Datum gefunden, aber es war nicht annähernd, 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:
lr_start_transaction("20000101");
\\x0Ejava.util.Datehj\\x81\\x01KYt\\x19\\x03\\x00\\x00xpw\\x08\\x00\\x00\\x01,\\xE10\\x0BXxt\\x00\\x08OTTST153t\\x00\\x06/Web2/t\\x00\\x044971t\\x00\\x0B12ce12f737d\\x00\\x00\\x01,\\xE10\\x0BXsq\\x00~\\x00\\x0Fw\\x08\\x00\\x00\\x00\\xDCk\\xE2T\\x80xt
Der Datumswert ist genau am Ende!
Und die "anderen Charaktere, die ich gerade nicht bekomme"? –