Java内置的实现序列化、反序列化、案例

摘要:Java内置的实现序列化、反序列化、案例

一:创建Maven工程,编写Java内置的序列化,反序列化方法

package cn.micai.base.io;

import java.io.*;

/**
 * @Auther: zhaoxinguo
 * @Date: 2018/8/23 10:48
 * @Description: Java内置的实现序列化、反序列化
 */
public class JavaSerializeDeserializeMain {

    /**
     * Java内置的实现序列化
     * @param employee
     * @return
     * @throws IOException
     */
    public static byte[] serialize(Employee employee){
        // 定义一个字节数组输出流
        ByteArrayOutputStream byteArrayOutputStream = null;
        // 对象输出流
        ObjectOutputStream objectOutputStream = null;
        try {
            byteArrayOutputStream = new ByteArrayOutputStream();
            objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
            // 将对象写入到字节数组输出,进行序列化
            objectOutputStream.writeObject(employee);
            return byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                byteArrayOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * Java内置的实现反序列化
     * @param employeeArray
     * @return
     */
    public static Employee deserialize(byte[] employeeArray) {
        // 定义字节数组输入流
        ByteArrayInputStream byteArrayInputStream = null;
        // 执行反序列化,从流中读取对象
        ObjectInputStream objectInputStream = null;
        try {
            byteArrayInputStream = new ByteArrayInputStream(employeeArray);
            objectInputStream = new ObjectInputStream(byteArrayInputStream);
            return (Employee) objectInputStream.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                byteArrayInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                objectInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public static void main(String [] args) {

        Employee employee = new Employee();
        employee.setEmployeeId(1);
        employee.setEmployeeName("赵新国");
        employee.setDepartment("软件工程师");
        // 序列化
        byte[] serialize = serialize(employee);
        System.out.println(serialize);
        // 反序列化
        Employee deserialize = deserialize(serialize);
        System.out.println(deserialize.toString());

    }

}

二:编写Employee对象

package cn.micai.base.io;

import java.io.Serializable;

/**
 * 描述:
 * 

* * transient使用小结 * 1.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 * 2.transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。 * 3.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。 * * @author: 赵新国 * @date: 2018/6/7 12:10 */ public class Employee implements Serializable { private static final long serialVersionUID = 1L; private int employeeId; private String employeeName; /** * 使用transient关键字,表示该字段不序列化 */ private transient String department; public int getEmployeeId() { return employeeId; } public void setEmployeeId(int employeeId) { this.employeeId = employeeId; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } @Override public String toString() { return "Employee{" + "employeeId=" + employeeId + ", employeeName='" + employeeName + '\'' + ", department='" + department + '\'' + '}'; } }

三:测试结果

Java内置的实现序列化、反序列化、案例_第1张图片

温馨提示:这里反序列化以后,department字段为空,是因为在Employee对象里面对这个字段加了transient修饰符,该修饰符的作用就是该字段不序列化,所以反序列化后,该字段为空是正常的。

你可能感兴趣的:(Java后端技术)