面試題總結——對象序列化與反序列化
對象序列化:將內存中保存的對象變爲二進制數據流的形式進行傳輸,或者是將其保存在文本中。
簡單來說:
序列化:把對象轉換爲字節序列的過程
反序列化:把字節序列恢復爲對象的過程
序列化的用途:
1、把對象的字節序列永久的保存在硬盤上(放在一個文件中),要取出的時候再反序列化爲對象即可。
2、網絡上傳輸對象
(對象->字節序列->網絡傳輸(字節)->字節序列->對象)
序列化與反序列化的前提
需要被序列化的類必須實現java.io.Serializable接口
。
對象輸出流:ObjectOutputStream,使用writeObject(Object obj)方法可對obj對象進行序列化,將得到的字節序列寫入一個當前程序的輸出流中。對象輸出流需要和其他輸出流(內存流/文件流…)配合使用。
對象輸入流:ObjectInputStream,使用readObject()方法從一個源輸入流中讀取字節序列,再將該字節序列反序列化爲一個對象,並將該對象返回。對象輸入流也需要和其他輸入流(內存流/文件流…)搭配使用。
對象序列化的過程:
1、創建一個對象輸出流,它可以包裝一個其他類型的輸出流(eg:文件輸出流)
2、通過對象輸出流的writeObject()將對象->字節序列。
對象反序列化的過程:
1、 創建一個對象輸入流,它可以包裝一個其他類型的源輸入流(eg:文件輸入流)
2、通過對象輸入流的readObject()將字節序列->對象。