2012-04-24 31 views
0

我想知道为什么当我使用表序列化同一对象内存:序列化相同的对象,观察不同的结果

ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); 
     ObjectOutputStream stream = new ObjectOutputStream(byteOutput); 
stream.writeObject(m.view()); //view return a string 


     stream.flush(); 
     stream.close(); 
     byteOutput.flush(); 
     byteOutput.close(); 

,我跑我的程序好几次,我得到不同的结果(而不是差异很大,但仍有差异)

execution 1 :4497 
execution 3 :4500 
execution 4 :4500 
execution 5 :4494 

m:是一个包含其他类的另一个对象的对象。我不能列出所有的类在这里,这是一个大的框架,string序列是一样的!

+3

什么是'M'和'overhead'?也许尝试发布一个完整的SSCCE(http://sscce.org)? – 2012-04-24 09:06:55

+0

如果大小不完全相同,则对象也不相同。 – 2012-04-24 09:28:12

+0

是相同的大小,相同的是执行,它都一样:) – Mehdi 2012-04-24 09:36:08

回答

1

假设你的目标是你的代码m看来你有不同的状态(overhead)。由于序列化是递归的,不仅是你的对象,而且它包含的所有其他对象必须是相同的。

请张贴m更多的信息,它是连接overhead了更完整的答案。

+0

是的,我知道,它不仅需要我的对象,还需要其中包含的所有其他对象。但是,当我运行几次时,所有执行都是相同的(相同的数据输入,相同的对象,相同的环境,全部相同)。 – Mehdi 2012-04-24 09:26:52

0

东西你的执行方式不同,你是否在你的对象中使用当前时间?

您可以告诉我们更多的情况下,或尝试自己找出什么不同,但只要你说什么不同,但结果你会找不到解释...

尽量减少问题是,你说m.view()的结果总是相同的,你怎么知道的?如果它总是返回相同的结果,硬编码的结果在一个字符串,并告诉我们,相同的字符串序列化多次给出不同的结果...

相关问题