2012-04-24 51 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()的結果總是相同的,你怎麼知道的?如果它總是返回相同的結果,硬編碼的結果在一個字符串,並告訴我們,相同的字符串序列化多次給出不同的結果...

相關問題