本文目錄一覽:
- 1、什麼是java序列化
- 2、什麼是序列化,在java中如何實現序列化?
- 3、為什麼java要實現對象序列化
- 4、java中為什麼要進行對象序列化?
- 5、Java中對象序列化的作用是什麼?全面一點,謝謝
- 6、Java中如何序列化一個對象
什麼是java序列化
Java中的序列化是把Java對象轉換為位元組序列的過程,能夠將一個實例對象的狀態信息寫入到一個位元組流中,使其可以通過socket進行傳輸、或者持久化到存儲數據庫或文件系統中,然後在需要的時候通過位元組流中的信息來重構一個相同的
什麼是序列化,在java中如何實現序列化?
一、什麼是序列化:\x0d\x0a序列化理解成「打碎」是可以的,不過在書本上的名詞就是將對象轉換成二進制。\x0d\x0a\x0d\x0a二、在java中如何實現序列化:\x0d\x0a首先我們要把準備要序列化類,實現 Serializabel接口\x0d\x0a例如:我們要Person類里的name和age都序列化\x0d\x0aimport java.io.Serializable;\x0d\x0a\x0d\x0apublic class Person implements Serializable { //本類可以序列化\x0d\x0a private String name ;\x0d\x0a private int age ;\x0d\x0a \x0d\x0a public Person(String name,int age){\x0d\x0a this.name = name ;\x0d\x0a this.age = age ;\x0d\x0a }\x0d\x0a public String toString(){\x0d\x0a return “姓名:” + this.name + “,年齡” + this.age ;\x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0a然後:我們將name和age序列化(也就是把這2個對象轉為二進制,統族理解為「打碎」)\x0d\x0apackage org.lxh.SerDemo;\x0d\x0a\x0d\x0aimport java.io.File;\x0d\x0aimport java.io.FileOutputStream;\x0d\x0aimport java.io.ObjectOutputStream ;\x0d\x0a\x0d\x0apublic class ObjectOutputStreamDemo { //序列化\x0d\x0a\x0d\x0a public static void main(String[] args) throws Exception {\x0d\x0a//序列化後生成指定文件路徑\x0d\x0a File file = new File(“D:” + File.separator + “person.ser”) ; ObjectOutputStream oos = null ;\x0d\x0a//裝飾流(流)\x0d\x0a oos = new ObjectOutputStream(new FileOutputStream(file)) ; \x0d\x0a//實例化類\x0d\x0a Person per = new Person(“張三”,30) ; oos.writeObject(per) ;//把類對象序列化\x0d\x0a oos.close() ;\x0d\x0a }\x0d\x0a}
為什麼java要實現對象序列化
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化,將數據分解成位元組流,以便存儲在文件中或在網絡上傳輸。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。
序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements
Serializable只是為了標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object
obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流;
序列化分為兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成位元組流,以便存儲在文件中或在網絡上傳輸。反序列化就是打開位元組流並重構對象。對象序列化不僅要將基本數據類型轉換成位元組表示,有時還要恢複數據。恢複數據要求有恢複數據的對象實例
序列化的什麼特點:
如果某個類能夠被序列化,其子類也可以被序列化。聲明為static和transient類型的成員數據不能被序列化。因為static代表類的狀態, transient代表對象的臨時數據。
什麼時候使用序列化:
一:對象序列化可以實現分佈式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。
二:java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入位元組流中,可以保存在文件中或在網絡連接上傳遞。利用對象序列化可以進行對象的」深複製」,即複製對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。
java中為什麼要進行對象序列化?
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。
序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
Java中對象序列化的作用是什麼?全面一點,謝謝
1、序列化是幹什麼的?
簡單說就是為了保存在內存中的各種對象的狀態,並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存Object States,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。
2、什麼情況下需要序列化
a)當你想把的內存中的對象保存到一個文件中或者數據庫中時候;
b)當你想用套接字在網絡上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
3、當對一個對象實現序列化時,究竟發生了什麼?
在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實例變量(instance ariable)比如:
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);
當通過下面的代碼序列化之後,MyFoo對象中的width和Height實例變量的值(37,70)都被保存到foo.ser文件中,這樣以後又可以把它 從文件中讀出來,重新在堆中創建原來的對象。當然保存時候不僅僅是保存對象的實例變量的值,JVM還要保存一些小量信息,比如類的類型等以便恢復原來的對 象。
FileOutputStream fs = new FileOutputStream(“foo.ser”);
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);
4、實現序列化(保存到一個文件)的步驟
a)Make a FileOutputStream
java 代碼
FileOutputStream fs = new FileOutputStream(“foo.ser”);
b)Make a ObjectOutputStream
java 代碼
ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object
java 代碼
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代碼
os.close();
5、舉例說明
java 代碼
import java.io.*;
public class Box implements Serializable
{
private int width;
private int height;
public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}
public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);
try{
FileOutputStream fs = new FileOutputStream(“foo.ser”);
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
6、相關注意事項
a)當一個父類實現序列化,子類自動實現序列化,不需要顯式實現Serializable接口;
b)當一個對象的實例變量引用其他對象,序列化該對象時也把引用對象進行序列化;
c)並非所有的對象都可以序列化,,至於為什麼不可以,有很多原因了,比如:
1.安全方面的原因,比如一個對象擁有private,public等field,對於一個要傳輸的對象,比如寫到文件,或者進行rmi傳輸 等等,在序列化進行傳輸的過程中,這個對象的private等域是不受保護的。
2. 資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。
Java中如何序列化一個對象
JDK類庫中序列化的步驟
步驟一:創建一個對象輸出流,它可以包裝一個其它類型的目標輸出流,如文件輸出流:
ObjectOutputStream out = new ObjectOutputStream(new fileOutputStream(「D:\\objectfile.obj」));
步驟二:通過對象輸出流的writeObject()方法寫對象:
out.writeObject(「Hello」);
out.writeObject(new Date());
還不會的話~ 加4QAQ我,和你說好了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/233988.html