La sérialisation java.util.Date

Personne ne sait comment un java.util.La Date est sérialisée? Je veux dire, expliquez-moi exactement ce que chaque octet est? J'ai essayé d'écrire une longue date et je peux voir les matchs, mais il y a d'autres personnages que je n'ai tout simplement pas l'obtenir.

Notre application fait des demandes de serveur avec les données ce qui signifie qu'il est sérialisée du client vers le serveur. L'équipe qui fait les tests de stress utilise un outil qui rend compte de ces demandes et les modifie, le problème est qu'ils veulent processus dates et je ne sais pas comment interpréter le flux d'octets. Le mec que je parle semble prêt à apprendre, mais jusqu'à présent, je n'ai rien trouvé que je comprends le point de lui...

Code que j'ai utilisé:

  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:

La sortie de la ci-dessus est:

"¬í w  ,áqÇ-t Todaysr java.util.DatehjKYt  xpw  ,áqÇ-x"

Le long est "w ,áqÇ-" alors, quel est le truc entre la longue et la Date de l'objet, c'est à dire "hjKYt xp"

REMARQUE certains les blancs sont des caractères non imprimables NULL, SOH, retour arrière, etc. Je comprends que c'est la valeur hexadécimale qui compte.

EDIT:

Encore avoir des problèmes. Pour une raison quelconque, le sérialisé requête HTTP n'est pas sérialiser la date exactement comme la réponse que j'ai accepté dit. Très proche, mais toujours différents et je ne sais pas pourquoi. Ce qui est encore étrangeté, c'est que quand je sérialiser une date, elle semble bien fonctionner. FYI à worj nous utilisons Websphere 6.1 Voici quelques exemples de ce qui est envoyé dans la requête:

 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

J'ai été en mesure d'identifier la plupart des domaines, mais pas le temps réel! E. g le serialVersionUID est hj\\x81\\x01KYt\\x19

MODIFIER (FINALE):

J'ai trouvé la date, mais c'était pas loin d'où j'ai attendu! C'était bien après l'échantillon que j'avais parce que les autres champs de données apparaissaient je pensais que la date a été fait, c'était juste une coup de chance que j'ai remarqué que le modèle hexagonal de la date que je cherchais! Exemple:

 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

La date de valeur est à la fin!

OriginalL'auteur BigMac66 | 2010-12-13