java 对象序列化与反序列化

时间:2021-03-02 11:58:06   收藏:0   阅读:0

序列化和反序列化是什么

当两个进程远程通信时,彼此可以发送各种类型的数据。 无论是何种类型的数据,都 会以二进制序列的形式在网络上传送。比如,我们可以通过 http 协议发送字符串信息;我 们也可以在网络上直接发送 Java 对象。发送方需要把这个 Java 对象转换为字节序列,才能 在网络上传送;接收方则需要把字节序列再恢复为 Java 对象才能正常读取。
把 Java 对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为 Java 对象的 过程称为对象的反序列化。

对象序列化的作用有如下两种:

序列化涉及的类和接口

操作对象

将对象序列化到文件

ObjectOutputStream 可以将一个内存中的 Java 对象通过序列化的方式写入到磁盘的文 件中。被序列化的对象必须要实现 Serializable 序列化接口,否则会抛出异常。

定义实体类对象
package com.io;

import java.io.Serializable;

public class Users implements Serializable {
    private int userId;
    private String userName;
    private String userAge;

    public Users() {
    }

    public Users(int userId, String userName, String userAge) {
        this.userId = userId;
        this.userName = userName;
        this.userAge = userAge;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAge() {
        return userAge;
    }

    public void setUserAge(String userAge) {
        this.userAge = userAge;
    }
}

对象序列化
package com.io;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * 对象序列化的过程:就是将对象转换成字节
 */
public class ObjectOutputStreamObjectTypeDemo {
    public static void main(String[] args) {
        ObjectOutputStream oos = null;

        try {
            oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("/Users/pain_/Desktop/b/c/b")));
            Users user = new Users(1, "kevin", "18");
            oos.writeObject(user);
            oos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (oos != null) {
                    oos.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

对象反序列化
package com.io;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * 对象反序列化:字节转对象
 */
public class ObjectInputStreamObjectTypeDemo {
    public static void main(String[] args) {
        ObjectInputStream ois = null;

        try {
            ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("/Users/pain_/Desktop/b/c/b")));
            Users users = (Users) ois.readObject();
            System.out.println("Id:" + users.getUserId() + "\t" + "姓名:" + users.getUserName() + "\t" + "年龄" + users.getUserAge());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (ois != null) {
                    ois.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!