1. 程式人生 > >Java踩坑筆記:ObjectIOStream與IOStream的各種裝飾器(先挖個坑,以後再來詳細填)

Java踩坑筆記:ObjectIOStream與IOStream的各種裝飾器(先挖個坑,以後再來詳細填)

ted objects lose val read thread 環境 valid 序列化對象

Java的序列化和ObjectStream真是一個大坑。。

先不說多線程環境下的問題,在單線程裏,一個Socket只能保持一個ObjectOutputStream,原因好像是在於ObjectOutputStream有鎖機制或是阻塞之類的東西,否則會導致接受方出現”StreamCorruptedException : invalid type code AC“,同理ObjectInputStream也只能保持一個,否則接收方會出現header錯誤的相關異常。

據說原因是ObjectOutputStream在構造的時候即new一個出來的時候,就會給輸出流的開頭添加幾個用於表示序列化對象開頭的字節,多次的new而不close就會導致流裏面有多個表示開頭的地方,接收方就會報錯。

頓時感覺Java IO真是一塊大頭,可能會比Net和Thread兩座大山更大,等以後有緣分看完API的源碼,我就回來再填吧(flag

Java踩坑筆記:ObjectIOStream與IOStream的各種裝飾器(先挖個坑,以後再來詳細填)