激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 實例分析java對象的序列化和反序列化

實例分析java對象的序列化和反序列化

2021-06-02 14:07GolLong Java教程

序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。一般將一個對象存儲至一個儲存媒介,例如檔案或是記億體緩沖等。在網絡傳輸過程中,可以是字節或是XML等格式。而字節的或XML編碼格式可以還原完全

引言:

  序列化是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程,在序列化期間,對象將其帶你過去的狀態寫入到臨時或持儲存區,反序列化就是重新創建對象的過程,此對象來自于臨時或持久儲存區。

序列化的作用:

  就好比如存儲數據到數據庫,將一些數據持久化到數據庫中,而有時候需要將對象持久化,雖然說將對象狀態持久化的方式有很多,但是java給我們提供了一種很便捷的方式,那就是序列化,序列化可以實現對象到文件之間的直接轉換,實現細節對我們隱藏。

  具體的三種用途:
•將對象的狀態信息持久化保存到硬盤上
•將對象信息在網絡上傳輸
•深度克隆(就是序列化后再反序列化)

方式一:實現serializable接口,通過序列化流

  實現serializable接口,通過objectoutputstream和objectinputstream將對象序列化和反序列化。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.*;
public class user implements serializable {
  private static final long serialversionuid = 1l;
  private string name;
  private int age;
 
  public user(string name, int age) {
    this.name = name;
    this.age = age;
  }
 
  @override
  public string tostring() {
    return "user{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
  }
 
  public static void main(string[] args) throws ioexception, classnotfoundexception {
//    user user = new user("gol",22);
//    bytearrayoutputstream bo = new bytearrayoutputstream();
//    objectoutputstream oo = new objectoutputstream(bo);
//    oo.writeobject(user);//序列化.user寫入字節數組流中
//    bytearrayinputstream bi = new bytearrayinputstream(bo.tobytearray());
//    objectinputstream oi = new objectinputstream(bi);
//    user userser = (user) oi.readobject();//反序列化
//    system.out.println(userser);
    user user = new user("gol",22);
    fileoutputstream fos = new fileoutputstream("a.txt");
    objectoutputstream oo = new objectoutputstream(fos);
    oo.writeobject(user);//序列化.user寫入文件中
    fileinputstream fis = new fileinputstream("a.txt");
    objectinputstream oi = new objectinputstream(fis);
    user userser = (user) oi.readobject();//反序列化
    system.out.println(userser);
    oi.close();
    fis.close();
    oo.close();
    fos.close();
  }
}

方式二:實現externalizable接口,重寫writeexternal和readexternal方法

  externalizable接口繼承了serializable接口,替我們封裝了兩個方法,一個用于序列化,一個用于反序列化。這種方式是將屬性序列化,注意這種方式transient修飾詞將失去作用,也就是說被transient修飾的屬性,只要你在writeexternal方法中序列化了該屬性,照樣也會得到序列化。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.*;
public class user implements externalizable {
  private static final long serialversionuid = 1l;
  private string name;
  private int age;
 
  public user() {
  }
 
  public user(string name, int age) {
    this.name = name;
    this.age = age;
  }
  @override
  public string tostring() {
    return "user{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
  }
 
  @override
  public void writeexternal(objectoutput out) throws ioexception {
    out.writeobject(this.name);//將屬性分別序列化
    out.writeobject(this.age);
  }
 
  @override
  public void readexternal(objectinput in) throws ioexception, classnotfoundexception {
    this.name=(string)in.readobject();//反序列化屬性
    this.age=(int)in.readobject();
  }
 
  public static void main(string[] args) throws ioexception, classnotfoundexception {
    fileoutputstream fos = new fileoutputstream("a.txt");
    objectoutputstream oo = new objectoutputstream(fos);
    fileinputstream fis = new fileinputstream("a.txt");
    objectinputstream oi = new objectinputstream(fis);
    user user = new user("gol",19);
    user.writeexternal(oo);//序列化
    user userenr = new user();
    userenr.readexternal(oi);//反序列化
    system.out.println(userenr);
    oi.close();
    fis.close();
    oo.close();
    fos.close();
  }
}

總結:

注意以下三點:

•serializable接口是標記接口,是個空接口,用于標識該類可以被序列化。
•transient是屬性修飾符,被其修飾的屬性將不會被序列化,但是使用方式二的話,明確寫明該屬性序列化同樣可以得到序列化。
•serialversionuid屬性是類的序列化標識id,若序列化的對象和反序列化的對象其serialversionuid屬性不一樣則會報錯。

原文鏈接:https://www.cnblogs.com/gollong/p/9669515.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲视频在线 | 久久午夜免费视频 | 亚洲电影在线播放 | 久久情爱网 | 最近日本电影hd免费观看 | 日本成人午夜视频 | 久久久中 | 国产一区二区三区视频免费 | 国产拍拍拍三级费视频在线观看 | 久久久久一本一区二区青青蜜月 | 精品人伦一区二区三区蜜桃网站 | 香蕉久久久久久 | 九九热精品在线视频 | 色97在线| 久久在线免费视频 | 国产乱乱视频 | 蜜桃欧美性大片免费视频 | 中文字幕激情 | 在线看免电影网站 | 久久久久北条麻妃免费看 | 操操电影| 久久影院国产精品 | 小视频免费在线观看 | 国产精品久久久久一区二区 | 成人三级在线播放 | 日本成人在线免费 | 精品免费在线视频 | 欧美日韩色片 | 九九午夜视频 | 二区三区在线观看 | 美女黄视频在线观看 | 亚洲一区在线免费视频 | 久草在线手机视频 | 日韩一级片一区二区三区 | 欧美成人一区二区三区 | 精品一区二区三区免费毛片 | 精品国产一级毛片 | xxnxx中国18| 日韩黄色av | 在线a毛片免费视频观看 | 国产精品美女久久久免费 |