在我的机器上,下面的代码片段:
DateTime now = DateTime.now();
System.out.println(now);
System.out.println("Date size:\t\t"+serialiseToArray(now).length);
System.out.println("DateString size:\t"+serialiseToArray(now.toString()).length);
System.out.println("java.util.Date size:\t"+serialiseToArray(new Date()).length);
Duration twoHours = Duration.standardHours(2);
System.out.println(twoHours);
System.out.println("Duration size:\t\t"+serialiseToArray(twoHours).length);
System.out.println("DurationString size:\t"+serialiseToArray(twoHours.toString()).length);
给出以下输出:
2013-09-09T15:07:44.642+01:00
Date size: 273
DateString size: 36
java.util.Date size: 46
PT7200S
Duration size: 107
DurationString size: 14
如您所见,org.joda.time.DateTime 对象比它的 String 形式大 5 倍以上,这似乎完美地描述了它,与 java.util.Date 等效。代表 2 小时的 Duration 对象也比我预期的要大得多,因为查看源代码似乎它的唯一成员变量是单个long
值。
为什么这些序列化的对象这么大?是否有任何预先存在的解决方案来获得更小的表示?
serialiseToArray 方法,供参考:
private static byte[] serialiseToArray(Serializable s)
{
try
{
ByteArrayOutputStream byteArrayBuffer = new ByteArrayOutputStream();
new ObjectOutputStream(byteArrayBuffer).writeObject(s);
return byteArrayBuffer.toByteArray();
}
catch (IOException ex)
{
throw new RuntimeException(ex);
}
}