Java 序列化,java开发面试笔试题

本文详细介绍了Java序列化,包括定义、用途、Serializable接口、transient关键字、Externalizable接口及其替代方法,并讨论了serialVersionUID的重要性和序列化机制。同时,文章提供了面试相关的知识点,适合Java开发者和面试者学习。
摘要由CSDN通过智能技术生成


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化

 

Java 序列化

 

简介

定义

序列化:序列化是将对象转换为字节流。

反序列化:反序列化是将字节流转换为对象。




 

用途

序列化的用途有:




  •  
  • 序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中。


     
  • 在网络上传送对象的字节序列。


     
  • RMI(远程方法调用)


     

序列化和反序列化

Java 通过对象输入输出流来实现序列化和反序列化:




  •  
  • 序列化:java.io.ObjectOutputStream 类的 writeObject() 方法可以实现序列化;


     
  • 反序列化:java.io.ObjectInputStream 类的 readObject() 方法用于实现反序列化。


     

序列化和反序列化示例:


public class SerializeDemo01 {

    enum Sex {

        MALE, FEMALE

    }

    static class Person implements Serializable {

        private static final long serialVersionUID = 1L;

        private String name = null;

        private Integer age = null;

        private Sex sex;

        public Person() {

            System.out.println("call Person()");

        }

        public Person(String name, Integer age, Sex sex) {

            this.name = name;

            this.age = age;

            this.sex = sex;

        }

        public String toString() {

            return "name: " + this.name + ", age: " + this.age + ", sex: " + this.sex;

        }

    }

    /**

     * 序列化

     */

    private static void serialize(String filename) throws IOException {

        File f = new File(filename); // 定义保存路径

        OutputStream out = new FileOutputStream(f); // 文件输出流

        ObjectOutputStream oos = new ObjectOutputStream(out); // 对象输出流

        oos.writeObject(new Person("Jack", 30, Sex.MALE)); // 保存对象

        oos.close();

        out.close();

    }

    /**

     * 反序列化

     */

    private static void deserialize(String filename) throws IOException, ClassNotFoundException {

        File f = new File(filename); // 定义保存路径

        InputStream in = new FileInputStream(f); // 文件输入流

        ObjectInputStream ois = new ObjectInputStream(in); // 对象输入流

        Object obj = ois.readObject(); // 读取对象

        ois.close();

        in.close();

        System.out.println(obj);

    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        final String filename = "d:/text.dat";

        serialize(filename);

        deserialize(filename);

    }

}

输出:

name: Jack, age: 30, sex: MALE

Serializable 接口

被序列化的类必须属于 Enum、Array 和 Serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值