資源描述:
《java序列化(serializable)的作用和反序列化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、java序列化(Serializable)的作用和反序列化1、序列化是干什么的??簡(jiǎn)單說(shuō)就是為了保存在內(nèi)存中的各種對(duì)象的狀態(tài)(也就是實(shí)例變量,不是方法),并且可以把保存的對(duì)象狀態(tài)再讀出來(lái)。雖然你可以用你自己的各種各樣的方法來(lái)保存objectstates,但是Java給你提供一種應(yīng)該比你自己好的保存對(duì)象狀態(tài)的機(jī)制,那就是序列化。2、什么情況下需要序列化a)當(dāng)你想把的內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中時(shí)候;b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;c)當(dāng)你想通過(guò)RMI傳輸對(duì)象的時(shí)候;3、當(dāng)對(duì)一個(gè)對(duì)象實(shí)現(xiàn)序列化時(shí),究
2、竟發(fā)生了什么?在沒(méi)有序列化前,每個(gè)保存在堆(Heap)中的對(duì)象都有相應(yīng)的狀態(tài)(state),即實(shí)例變量(instanceariable)比如:java代碼Foo?myFoo=newFoo();myFoo.setWidth(37);myFoo.setHeight(70);當(dāng)通過(guò)下面的代碼序列化之后,MyFoo對(duì)象中的width和Height實(shí)例變量的值(37,70)都被保存到foo.ser文件中,這樣以后又可以把它從文件中讀出來(lái),重新在堆中創(chuàng)建原來(lái)的對(duì)象。當(dāng)然保存時(shí)候不僅僅是保存對(duì)象的實(shí)例變量的值,JVM還要保存一些小量信
3、息,比如類的類型等以便恢復(fù)原來(lái)的對(duì)象。java代碼FileOutputStreamfs=newFileOutputStream("foo.ser");ObjectOutputStreamos=newObjectOutputStream(fs);os.writeObject(myFoo);4、實(shí)現(xiàn)序列化(保存到一個(gè)文件)的步驟?a、MakeaFileOutputStreamjava代碼FileOutputStreamfs=newFileOutputStream(“foo.ser”);b、MakeaObjectOutputS
4、treamjava代碼ObjectOutputStreamos=?newObjectOutputStream(fs);c、writetheobjectjava代碼os.writeObject(myObject1);os.writeObject(myObject2);os.writeObject(myObject3);d、closetheObjectOutputStreamjava代碼os.close();5、舉例說(shuō)明Java代碼package?com.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?class?Box?implements?Serializable?{1.private?static?final?long?serialVersionUID?=?1L;2.private?int?
6、width;3.private?int?height;4.private?String?name;5.public?static?void?main(String[]?args)?{6.try?{7.Box?myBox?=?new?Box();8.myBox.setWidth(50);9.myBox.setHeight(30);10.myBox.setName(“雕戈”);11.FileOutputStream?fs?=?new?FileOutputStream(“serializableObject.txt”);12.
7、ObjectOutputStream?os?=?new?ObjectOutputStream(fs);13.os.writeObject(myBox);14.os.close();15.fs.close();16.}?catch?(Exception?ex)?{17.ex.printStackTrace();18.}19.try?{20.FileInputStream?fis?=?new?FileInputStream(“serializableObject.txt”);21.ObjectInputStream?ois?
8、=?new?ObjectInputStream(fis);22.Box?box?=?(Box)?ois.readObject();23.System.out.println(box.getWidth());24.System.out.println(box.getHeight());25.System.out.pri