文档章节

java序列化和反序列化

o
 osc_fmg49rzg
发布于 2019/03/20 20:44
字数 433
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

序列化概念:java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据,有关对象的类型的信息和存储在对象中数据的类型。

反序列化概念:把字节恢复为对象的过程叫反序列化。

类ObjectInputStream和ObjectOutputStream包含了序列化和反序列化对象的方法。

 

一个类要想序列化成功,必须满足两个条件:

该类必须实现java.io.SeriaAlizable;

该类的所有属性必须是可序列化的,如果一个属性不是可序列化的,则该属性必须注明是短暂的。

示例:

SerializeDemo.java文件:用ObjectOnputStream实现序列化

import java.io.*;
public class SerializerDemo { 

    public static void main(String [] args)
    {
        Employee e = new Employee();
        e.name = "Ali";
        e.address = "yi";
        e.SSN = 123456;
        e.number = 11545;
        try {
            //文件输出流(FileOutputStream):FileOutputStream用于写入原始字节流,如图像数据。当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名
            FileOutputStream fileOut = new FileOutputStream("C:/Users/July/Desktop/test/1.ser");
            //ObjectOutputStream 类用来序列化一个对象
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(e);
            out.close();
            fileOut.close();
            System.out.printf("成功序列化");
        }catch(IOException i)
        {
            i.printStackTrace();
        }
    }
}

 employee.java文件:

import java.io.Serializable;

//创建接口
class Employee implements Serializable{
    public String name;
       public String address;
       public transient int SSN;
       public int number;
       
}

反序列化:用ObjectInputStream实现反序列化

import java.io.*;
public class DeserializeDemo {

    public static void main(String[] args) throws ClassNotFoundException {
        Employee e = null;
        try {
            FileInputStream fileIn = new FileInputStream("C:/Users/July/Desktop/test/1.ser");
            ObjectInputStream  in = new ObjectInputStream(fileIn);
            e = (Employee) in.readObject();
            in.close();
            fileIn.close();
        }catch(IOException i)
        {
            i.printStackTrace();
            return;
        }catch(ClassNotFoundException c)
        {
            System.out.println("Emplyoee类没有发现");
            c.printStackTrace();
        }
        System.out.println("执行。。。。。");
        System .out .println("Name:" + e.name );
        System .out .println("Address:" + e.address  );
        System .out .println("SSN:" + e.SSN  );
        System .out .println("Number:" + e.number );
    }

}

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

unity的UGUI之中锚点(Anchors)和中心点(Pivot)、Shift和Alt键功能

在UGUI的控件属性之中,最上方的Rect Transform一栏可以看到锚点和中心点: 锚点Anchors 控件用于定位自身的基准点 可以点击左上角的方框,在其中选择锚点的不同方式: 注意图中,黄色的小点...

路过暴风
50分钟前
7
0
如何将div放置在其容器的底部? - How can I position my div at the bottom of its container?

问题: Given the following HTML: 鉴于以下HTML: <div id="container"> <!-- Other elements here --> <div id="copyright"> Copyright Foo web designs </div> </div> I would like #cop......

富含淀粉
今天
10
0
Distinct()与lambda? - Distinct() with lambda?

问题: Right, so I have an enumerable and wish to get distinct values from it. 是的,所以我有一个可枚举的,并希望从中获得不同的值。 Using System.Linq , there's of course an ext......

法国红酒甜
今天
16
0
学习编写编译器[关闭] - Learning to write a compiler [closed]

问题: Preferred languages : C/C++, Java, and Ruby. 首选语言 :C / C ++,Java和Ruby。 I am looking for some helpful books/tutorials on how to write your own compiler simply for......

技术盛宴
今天
17
0
OSChina 周一乱弹 —— 毛巾又怎么样?!我在乎的是大姐姐温柔的怀抱!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雨 因你而下,于你而止》- Seto 手机党少年们想听歌,请使劲儿戳(这里) @Dan...

小小编辑
今天
48
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部