javaserializable
❶ java怎麼自動生成serializable
自己寫一個java實體類,implements了Serializable介面,讓serialversionUID自動生成方法:
點擊類旁邊的內警告符號;
2.選擇容Add generated serial version ID即可自動生成。
❷ java中serializable是什麼
java Serializable,就是java提供的通用數據保存和讀取的介面。
序列化類的所有子類本身都是可序列化的。這回個序列化介面沒有任答何方法和域,僅用於標識序列化的語意。允許非序列化類的子類型序列化,子類型可以假定負責保存和恢復父類型的公有的、保護的和(如果可訪問)包的域的狀態。只要該類(擴展)有一個無參構造子,可初始化它的狀態,那麼子類型就可承擔上述職責。在這種情況下申明一個可序列化的類是一個錯誤。此錯誤將在運行時被檢測。就是可以把對象存到位元組流,然後可以恢復
❸ java中serializable是什麼
對象序列化介面類只有實現了Serializable介面對象才序列化因此要序列化某些類對象些類必回須實現Serializable介面而實際上答Serializable空介面沒有具體內容目只簡單標識類對象被序列化。
實際上 實現該介面的類 可以用於網路傳輸對象和把對象寫到磁碟,注意 是把對象寫到磁碟,而不是java文件。當然 也可以讀出來
❹ java中,什麼時候不能用Serializable
舉個例子,你編寫了一款游戲,保存記錄時把所有狀態一一保存非常麻煩,這時就可以使用Serializable(序列化介面),它的作用是可以將一個對象實例序列化,序列化後你可以選擇將它保存在你需要的位置。相對的,讀取後生成的對象所有屬性(除了設置為瞬時值的屬性)將和原對象的屬性相同(只是內存地址不同)。這樣可以方便的將一個java對象寫入到磁碟中,保存該對象的所有狀態!值得注意的是序列化的對象中包含的屬性和其他對象都需要實現序列化介面,不然無法正常序列化!在hibernate里,並非所有的實體類必須實現序列化介面,因為在hibernate中我們通常是將基本類型的數值映射為資料庫中的欄位。而基礎類型都實現了序列化介面(String也實現了)。所以,只有在想將一個對象完整存進資料庫(存儲為二進制碼),而不是將對象的屬性分別存進資料庫,讀取時再重新構建的話,就可以不用實現序列化介面。
❺ java中的Serializable什麼用 舉例
MVC中 java bean經常用這個.
----
沒有implements Serializable,你就不能通過rmi(包括ejb)提供遠程調用。
serialization 允許你將實現了Serializable介面的對象轉換為位元組序列,這些位元組序列可以被完全存儲以備以後重新生成原來的對象。
serialization不但可以在本機做,而且可以經由網路操作(就是貓小說的RMI)。這個好處是很大的----因為它自動屏蔽了操作系統的差異,位元組順序等。比如,在Window平台生成一個對象並序列化之,然後通過網路傳到一台Unix機器上,然後可以在這台Unix機器上正確地重構這個對象。
Object serialization主要用來支持2種主要的特性:
1。Java的RMI(remote method invocation).RMI允許象在本機上一樣操作遠程機器上的對象。當發送消息給遠程對象時,就需要用到serializaiton機制來發送參數和接收返回直。
2。Java的JavaBeans. Bean的狀態信息通常是在設計時配置的。Bean的狀態信息必須被存起來,以便當程序運行時能恢復這些狀態信息。這也需要serializaiton機制。
總之如果在網路的環境下做類傳輸,應該還是implements Serializable。
----
一般定義類的時候用
class UserValue ... implements Serializable
{
String name;
String password;
get and set methods...
}
❻ java裡面 implements Serializable有什麼作用
對象的串列化(Serialization)
一、串列化的概念和目的
1.什麼是串列化
對象的壽命通常隨著生成該對象的程序的終止而終止。有時候,可能需要將對象的狀態保存下來,在需要時再將對象恢復。我們把對象的這種能記錄自己的狀態以便將來再生的能力。叫作對象的持續性(persistence)。對象通過寫出描述自己狀態的數值來記錄自己 ,這個過程叫對象的串列化(Serialization) 。串列化的主要任務是寫出對象實例變數的數值。如果交量是另一對象的引用,則引用的對象也要串列化。這個過程是遞歸的,串列化可能要涉及一個復雜樹結構的單行化,包括原有對象、對象的對象、對象的對象的對象等等。對象所有權的層次結構稱為圖表(graph)。
2.串列化的目的
Java對象的單行化的目標是為Java的運行環境提供一組特性,如下所示:
1) 盡量保持對象串列化的簡單扼要 ,但要提供一種途徑使其可根據開發者的要求進行擴展或定製。
2) 串列化機制應嚴格遵守Java的對象模型 。對象的串列化狀態中應該存有所有的關於種類的安全特性的信息。
3) 對象的串列化機制應支持Java的對象持續性。
4) 對象的串列化機制應有足夠的 可擴展能力以支持對象的遠程方法調用(RMI)。
5) 對象串列化應允許對象定義自身 的格式即其自身的數據流表示形式,可外部化介面來完成這項功能。
二、串列化方法
從JDK1.1開始,Java語言提供了對象串列化機制 ,在java.io包中,介面Serialization用來作為實現對象串列化的工具 ,只有實現了Serialization的類的對象才可以被串列化。
Serializable介面中沒有任何的方法。當一個類聲明要實現Serializable介面時,只是表明該類參加串列化協議,而不需要實現任何特殊的方法。下面我們通過實例介紹如何對對象進行串列化。
1.定義一個可串列化對象
一個類,如果要使其對象可以被串列化,必須實現Serializable介面。我們定義一個類Student如下:
importjava.io.Serializable;
{
intid;//學號
Stringname;//姓名
intage;//年齡
Stringdepartment;//系別
publicStudent(intid,Stringname,intage,Stringdepartment){
this.id=id;
this.name=name;
this.age=age;
this.department=department;
}
}
2.構造對象的輸入/輸出流
要串列化一個對象,必須與一定的對象輸出/輸入流聯系起來,通過對象輸出流將對象狀態保存下來,再通過對象輸入流將對象狀態恢復。
java.io包中,提供了ObjectInputStream和ObjectOutputStream將數據流功能擴展至可讀寫對象 。在ObjectInputStream 中用readObject()方法可以直接讀取一個對象,ObjectOutputStream中用writeObject()方法可以直接將對象保存到輸出流中。
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
publicclassObjectSer{
publicstaticvoidmain(Stringargs[])throwsIOException,
ClassNotFoundException{
Studentstu=newStudent(981036,"LiuMing",18,"CSD");
FileOutputStreamfo=newFileOutputStream("data.ser");
ObjectOutputStreamso=newObjectOutputStream(fo);
try{
so.writeObject(stu);
so.close();
}catch(IOExceptione){
System.out.println(e);
}
stu=null;
FileInputStreamfi=newFileInputStream("data.ser");
ObjectInputStreamsi=newObjectInputStream(fi);
try{
stu=(Student)si.readObject();
si.close();
}catch(IOExceptione)
{
System.out.println(e);
}
System.out.println("StudentInfo:");
System.out.println("ID:"+stu.id);
System.out.println("Name:"+stu.name);
System.out.println("Age:"+stu.age);
System.out.println("Dep:"+stu.department);
}
}
運行結果如下:
Student Info:
ID:981036
Name:LiuMing
Age:18
Dep:CSD
在這個例子中,我們首先定義了一個類Student,實現了Serializable介面 ,然後通過對象輸出流的writeObject()方法將Student對象保存到文件 data.ser中 。之後,通過對家輸入流的readObjcet()方法從文件data.ser中讀出保存下來的Student對象 。從運行結果可以看到,通過串列化機制,可以正確地保存和恢復對象的狀態。
三、串列化的注意事項
1.串列化能保存的元素
串列化只能保存對象的非靜態成員交量,不能保存任何的成員方法和靜態的成員變數,而且串列化保存的只是變數的值,對於變數的任何修飾符都不能保存。
2.transient關鍵字
對於某些類型的對象,其狀態是瞬時的,這樣的對象是無法保存其狀態的。例如一個Thread對象或一個FileInputStream對象 ,對於這些欄位,我們必須用transient關鍵字標明,否則編譯器將報措。
另外 ,串列化可能涉及將對象存放到 磁碟上或在網路上發達數據,這時候就會產生安全問題。因為數據位於Java運行環境之外,不在Java安全機制的控制之中。對於這些需要保密的欄位,不應保存在永久介質中 ,或者不應簡單地不加處理地保存下來 ,為了保證安全性。應該在這些欄位前加上transient關鍵字。
下面是java規范中對transient關鍵字的解釋:
The transient marker is not fully specified by The Java Language Specification but is used in object serialization to mark member variables that should not be serialized.
以下是transient的一個應用舉例:
//LoggingInfo.java
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.util.Date;
.io.Serializable{
=1L;
privateDateloggingDate=newDate();
privateStringuid;
privatetransientStringpwd;
LoggingInfo(Stringuser,Stringpassword){
uid=user;
pwd=password;
}
publicStringtoString(){
Stringpassword=null;
if(pwd==null){
password="NOTSET";
}else{
password=pwd;
}
return"logoninfo: "+"user:"+uid+" loggingdate:"+loggingDate.toString()+" password:"+password;
}
publicstaticvoidmain(String[]args){
LoggingInfologInfo=newLoggingInfo("MIKE","MECHANICS");
System.out.println(logInfo.toString());
try{
ObjectOutputStreamo=newObjectOutputStream(newFileOutputStream("logInfo.out"));
o.writeObject(logInfo);
o.close();
}catch(Exceptione){//dealwithexception
}
//Toreadtheobjectback,wecanwrite
try{
ObjectInputStreamin=newObjectInputStream(newFileInputStream("logInfo.out"));
LoggingInfologInfo1=(LoggingInfo)in.readObject();
System.out.println(logInfo1.toString());
}catch(Exceptione){//dealwithexception
}
}
}
❼ java中serializable是什麼意思有什麼作用
一個對象序列抄化的介面,一個襲類只有實現了Serializable介面,它的對象才是可序列化的。因此如果要序列化某些類的對象,這些類就必須實現Serializable介面。而實際上,Serializable是一個空介面,沒有什麼具體內容,它的目的只是簡單的標識一個類的對象可以被序列化。
好處:
a)比如說你的內存不夠用了,那計算機就要將內存裡面的一部分對象暫時的保存到硬碟中,等到要用的時候再讀入到內存中,硬碟的那部分存儲空間就是所謂的虛擬內存。在比如過你要將某個特定的對象保存到文件中,我隔幾天在把它拿出來用,那麼這時候就要實現Serializable介面;
b)在進行java的Socket編程的時候,你有時候可能要傳輸某一類的對象,那麼也就要實現Serializable介面;最常見的你傳輸一個字元串,它是JDK裡面的類,也實現了Serializable介面,所以可以在網路上傳輸。
c)如果要通過遠程的方法調用(RMI)去調用一個遠程對象的方法,如在計算機A中調用另一台計算機B的對象的方法,那麼你需要通過JNDI服務獲取計算機B目標對象的引用,將對象從B傳送到A,就需要實現序列化介面。
❽ java中 serializable的使用方法。
把Java對象轉換為位元組序列的過程稱為對象的序列化。
把位元組專序列恢復為Java對象的屬過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
1) 把對象的位元組序列永久地保存到硬碟上,通常存放在一個文件中;
2) 在網路上傳送對象的位元組序列。
實現Serializable介面
ObjectOutputStream只能對Serializable介面的類的對象進行序列化。默認情況下,ObjectOutputStream按照默認方式序列化,這種序列化方式僅僅對對象的非transient的實例變數進行序列化,而不會序列化對象的transient的實例變數,也不會序列化靜態變數。
❾ java,Serializable怎麼用啊
您好,是這樣的抄:把Java對象轉換為位元組序列的過程稱為對象的序列化。
把位元組序列恢復為Java對象的過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
1) 把對象的位元組序列永久地保存到硬碟上,通常存放在一個文件中;
2) 在網路上傳送對象的位元組序列。
實現Serializable介面
ObjectOutputStream只能對Serializable介面的類的對象進行序列化。默認情況下,ObjectOutputStream按照默認方式序列化,這種序列化方式僅僅對對象的非transient的實例變數進行序列化,而不會序列化對象的transient的實例變數,也不會序列化靜態變數。