序列化相同的对象并观察不同的结果

时间:2012-04-24 09:03:17

标签: java memory serialization

我想知道为什么当我使用表格序列化内存中的相同对象时:

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序列化是相同的!

2 个答案:

答案 0 :(得分:1)

假设您的代码中的对象为m,您似乎有不同的状态(overhead)。由于序列化是递归的,因此不仅您的对象,而且它包含的所有其他对象必须相同。

请在m上发布更多相关信息及其与overhead的关联,以获得更全面的答案。

答案 1 :(得分:0)

你的执行中某些 不同,你是否使用对象中的当前时间?

您可以向我们展示更多背景信息,或者尝试自己找出不同的内容,但只要您说没有什么不同,但结果您将找不到解释......

尝试减少问题,你说m.view()会产生相同的结果,你怎么知道?如果它总是返回相同的结果,则将结果硬编码到字符串中并向我们显示多次序列化的相同字符串会产生不同的结果......