這篇文章給大家分享的是有關java序列化機制的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)專注于朝陽網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供朝陽營銷型網(wǎng)站建設,朝陽網(wǎng)站制作、朝陽網(wǎng)頁設計、朝陽網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務,打造朝陽網(wǎng)絡公司原創(chuàng)品牌,更為您提供朝陽網(wǎng)站排名全網(wǎng)營銷落地服務。
序列化是指對象通過寫出描述自己狀態(tài)的數(shù)值來記錄自己的過程,即將對象表示成一系列有序字節(jié),Java提供了將對象寫入流和從流中恢復對象的方法。對象能包含其它的對象,而其它的對象又可以包含另外的對象。Java序列化能夠自動的處理嵌套的對象。對于一個對象的簡單域,writeObject()直接將其值寫入流中。
當遇到一個對象域時,writeObject()被再次調(diào)用,如果這個對象內(nèi)嵌另一個對象,那么,writeObject()又被調(diào)用,直到對象能被直接寫入流為止。程序員所需要做的是將對象傳入ObjectOutputStream的writeObject()方法,剩下的將有系統(tǒng)自動完成。
要實現(xiàn)序列化的類必須實現(xiàn)的java.io.Serializable或java.io.Externalizable接口,否則將產(chǎn)生一個NotSerializableException。該接口內(nèi)部并沒有任何方法,它只是一個"tagging interface",僅僅"tags"它自己的對象是一個特殊的類型。
類通過實現(xiàn) java.io.Serializable接口以啟用其序列化功能。未實現(xiàn)此接口的類將無法使其任何狀態(tài)序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。
序列化接口沒有方法或字段,僅用于標識可序列化的語義。Java的"對象序列化"能讓你將一個實現(xiàn)了Serializable接口的對象轉(zhuǎn)換成一組byte,這樣日后要用這個對象時候,你就能把這些byte數(shù)據(jù)恢復出來,并據(jù)此重新構建那個對象了。
代碼如下
package stream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.security.auth.login.AccountException;
import org.junit.jupiter.api.Test;
/*
* 對象流
* 用與存儲和讀取基本數(shù)據(jù)類型數(shù)據(jù) 或 對象的處理劉。它的強大之處就是可以把java中的對象轉(zhuǎn)換成流
*
* */
public class ObjectInputStreamTeat {
/*
* 序列化過程:將內(nèi)存中的java對象保存到磁盤或通過網(wǎng)絡傳輸出去
* 使用ObjectOutputStream
* */
@Test
public void testObjectOutputStream() {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));
oos.writeObject(new String("我是中國人"));
oos.flush();
oos.writeObject(new Person("zsben",1,new Account(2000)));
oos.flush();
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(oos!=null)
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* 反序列化:用ObjectInputStream實現(xiàn)
* */
@Test
public void testObjectInputStream() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("Object.dat"));
Object object = ois.readObject();
String string = (String)object;
System.out.println(string);
Object object2 = ois.readObject();
Person person = (Person)object2;
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(ois!=null)
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/*
* 1.Person類要實現(xiàn)可序列化,必須實現(xiàn)可序列化接口Serializable
* 2.還需要添加一個最終類屬性UID
* 3.除了當前Person類需要實現(xiàn)Serializable,還要保證其內(nèi)部所有屬性都是可序列化的
* (默認情況下基本數(shù)據(jù)類型為可序列化)
* 對象流不能序列化static 和transient修飾的成員
* */
class Person implements Serializable{
public static final long serivalVersionUID = 5432146546351568416L;
private String name;
private static int age;
private Account account;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", account=" + account + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(String name, int age, Account account) {
super();
this.name = name;
this.age = age;
this.account = account;
}
public Person() {
super();
}
}
class Account implements Serializable{
private double balance;
static final public long serivalVersionUID = 54685237864535874L;
@Override
public String toString() {
return "Account [balance=" + balance + "]";
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public Account(double balance) {
super();
this.balance = balance;
}
public Account() {
super();
}
}感謝各位的閱讀!關于“java序列化機制的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)頁題目:java序列化機制的示例分析
當前地址:http://www.chinadenli.net/article14/peecge.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、動態(tài)網(wǎng)站、微信公眾號、移動網(wǎng)站建設、虛擬主機、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)