簡體   English   中英

僅在序列化對象時Java OptionalDataException(任何地方都沒有原始數據類型)

[英]Java OptionalDataException when only serializing objects (no primitive data types anywhere)

我正在處理一個我不知道的奇怪的OptionalDataException。

我有一些進來的對象,這些對象是通過裝飾OutputObjectStream並調用其writeUnshared方法將其寫入磁盤的類所保存的。 定期每10000個對象調用一次flushreset 最后,它關閉流。

這樣,我創建了少量只包含序列化對象的文件。

就是這個 寫入所有這些文件后,我將它們配對並嘗試對它們進行歸類排序。 此時,文件的大小沒有改變(如預期的那樣)。

為此,我首先打開兩個流,並在每個流上調用readObject

但是,每次對readObject調用(每個流的第一個調用)都會拋出OptionalDataException ,每次都是eof = false, length = 4 ,據我了解,這表明我正在讀取原始數據類型,或者發生了其他事情,我沒有。

好的,需要分享。

我為ObjectOutputStream創建了一個包裝器,正如我所說,該包裝器計算了序列化對象的數量,以便定期調用reset

問題出在該類的構造函數中,基本上是:

class CustomObjectOutputStream extends ObjectOutputStream {

    private int flushBoundary;

    CustomObjectOutputStream(ObjectOutputStream oos, int flushLimit){
               super(oos);
               ...
     }
   //other methods
}

現在,仔細查看javadoc頁面會發現

創建一個ObjectOutputStream寫入指定的OutputStream。 該構造函數將序列化流標頭寫入基礎流; 調用者可能希望立即刷新該流,以確保用於接收ObjectInputStreams的構造函數在讀取標頭時不會阻塞。

這意味着在文件開始時存在“一些額外的內容”。 我將super()調用更改為默認調用,並且OptionalDataExceptions消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM