資源描述:
《java之序列化Serializable》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、1、序列化是干什么的?簡單說就是為了保存在內(nèi)存中的各種對象的狀態(tài)(也就是實(shí)例變量,不是方法),并且可以把保存的對象狀態(tài)再讀出來。雖然你可以用你自己的各種各樣的方法來保存objectstates,但是Java給你提供一種應(yīng)該比你自己好的保存對象狀態(tài)的機(jī)制,那就是序列化。2、什么情況下需要序列化a)當(dāng)你想把的內(nèi)存中的對象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫中時(shí)候;b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對象的時(shí)候;c)當(dāng)你想通過RMI傳輸對象的時(shí)候;3、當(dāng)對一個(gè)對象實(shí)現(xiàn)序列化時(shí),究竟發(fā)生了什么?在沒有序列化前,每個(gè)保存在堆(
2、Heap)中的對象都有相應(yīng)的狀態(tài)(state),即實(shí)例變量(instanceariable)比如:java代碼Foo?myFoo=newFoo();myFoo.setWidth(37);myFoo.setHeight(70);當(dāng)通過下面的代碼序列化之后,MyFoo對象中的width和Height實(shí)例變量的值(37,70)都被保存到foo.ser文件中,這樣以后又可以把它從文件中讀出來,重新在堆中創(chuàng)建原來的對象。當(dāng)然保存時(shí)候不僅僅是保存對象的實(shí)例變量的值,JVM還要保存一些小量信息,比如類的類型等以便恢復(fù)原
3、來的對象。java代碼FileOutputStreamfs=newFileOutputStream("foo.ser");ObjectOutputStreamos=newObjectOutputStream(fs);os.writeObject(myFoo);4、實(shí)現(xiàn)序列化(保存到一個(gè)文件)的步驟a、MakeaFileOutputStreamjava代碼FileOutputStreamfs=newFileOutputStream(“foo.ser”);b、MakeaObjectOutputStreamja
4、va代碼ObjectOutputStreamos=?newObjectOutputStream(fs);c、writetheobjectjava代碼os.writeObject(myObject1);os.writeObject(myObject2);os.writeObject(myObject3);d、closetheObjectOutputStreamjava代碼os.close();5、舉例說明Java代碼packagecom.hotye.dchaoxiong.serializabletest;i
5、mport?java.io.FileInputStream;import?java.io.FileOutputStream;import?java.io.ObjectInputStream;import?java.io.ObjectOutputStream;import?java.io.Serializable;public?classBox?implementsSerializable?{·private?staticfinal?longserialVersionUID?=?1L;·private?in
6、t?width;·private?int?height;·private?String?name;·public?staticvoidmain(String[]?args)?{·try?{·Box?myBox?=?newBox();·myBox.setWidth(50);·myBox.setHeight(30);·myBox.setName(“雕戈”);·FileOutputStream?fs?=?newFileOutputStream(“serializableObject.txt”);·ObjectO
7、utputStream?os?=?newObjectOutputStream(fs);·os.writeObject(myBox);·os.close();·fs.close();·}?catch(Exception?ex)?{·ex.printStackTrace();·}·try?{·FileInputStream?fis?=?newFileInputStream(“serializableObject.txt”);·ObjectInputStream?ois?=?newObjectInputStre
8、am(fis);·Box?box?=?(Box)?ois.readObject();·System.out.println(box.getWidth());·System.out.println(box.getHeight());·System.out.println(box.getName());·ois.close();·fis.close();·}?catch(Exception?e)?{·e.printStackTra