序列化
序列化是指把Java對象保存為二進制字節碼的過程,Java反序列化是指把二進制碼重新轉換成Java對象的過程
序列化是一種輕量級的持久化,對象都是存活在內存中的,當JVM運行結束,對象便不存在了
如果想要對象還能夠存在,或者說當你在網絡中想要進行對象數據的傳輸的話,就需要進行序列化
說白了就是內存中的數據你要把他變成字節
ObjectInputStream 和 ObjectOutputStream就是java原生的用於處理序列化的功能
ObjectStreamConstants | 寫入 Object Serialization Stream 的常量 比如http請求似的,會有很多附加信息請求頭,class文件有他的文件信息類似的道理 序列化也會寫入一些除了直接數據信息以外的格式等相關的信息 這部分常量的值就在這個接口中 |
DataInput | 接口用於從二進制流中讀取字節,並根據所有 Java 基本類型數據進行重構 |
ObjectInput |
DataInput 包括基本類型的輸入方法
擴展了DataInput接口,以包含對象、數組和 String
|
DataOutput |
接口用於將數據從任意 Java 基本類型轉換為一系列字節,並將這些字節寫入二進制流
|
ObjectOutput |
DataOutput 包括基本類型的輸出方法;
擴展了DataOutput接口,以包含對象、數組和 String
|
可以看一下關於DataInputStream以及DataOutputStream的介紹
其實完全可以看得出來,DataInputStream以及DataOutputStream他們兩個也算是序列化
只不過他們不支持對象 數組 String 僅僅支持基本類型,功能不夠強大,使用也不夠方便
java原生的序列化不就是 基本類型/對象/數組/String 與 二進制字節流的相互轉換嘛
|
ObjectInputStream
ObjectOutputStream
ObjectOutputStream的整體思路其實也是類似於ObjectInputStream的
它內部也有一個跟BlockDataInputStream 對應的BlockDataOutputStream
不再詳細介紹
總結
ObjectInputStream 和 ObjectOutputStream 是java原生的序列化以及反序列化類
算是DataInputStream和DataOutputStream的超集(功能上的超集,不是父類)
DataXXX只能處理基本類型,ObjectXXX可以處理 基本類型以及對象 數組 String
DataInput/ObjectInput
DataOutput/ObjectOutput
這四個接口定義了序列化的協議,各種方法的定義
ObjectInputStream 和 ObjectOutputStream 遵循了IO InputStream 和 OutputStream的約定,提供IO的讀寫方式
並且遵守了DataOutput/ObjectOutput的約定,提供了更多的可以用於 數據與二進制字節轉換的讀寫方法
實際開發使用時只需要關注可以使用的方法即可
ObjectInputStream 和 ObjectOutputStream可以理解為實現了序列化的功能的一個工具
所以你必須依托於InputStream 或者OutputStream
通常是和FileInputStream 和 FileOutputStream配合進行使用的
看一下他們的構造方法你就知道了