• IO流之序列化


     类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化,并抛出异常(NotSerializableException

    格式:

    public class 类名 implements Serializable{ }

    一,序列化对象

    ObjectOutputStream 继承于OutputStream,专门用于把对象序列化到本地。提供了

    writeXXX

    writeObject() 用于写入一个对象

    public static void main(String[] args) throws IOException {
            Student stu=new Student("001","张三",20);
            File file=new File("D:\111\a.txt");
            FileOutputStream out=new FileOutputStream(file);
            ObjectOutputStream oos=new ObjectOutputStream(out);
            oos.writeObject(stu);
            oos.close();
            out.close();
        }

    序列化之后文件内容就成这样了:

    二,反序列化对象

    ObjectInputStream 继承于InputStream ,专门用于把本地持久化内容反序列化到内存,提供了

    readXXX

    readObject() 用于读取一个序列化内容并返回一个对象

    把上面序列化的文件反序列化回来:

    public static void main(String[] args) throws IOException, ClassNotFoundException {
            
            //反序列化
            File file=new File("D:\111\a.txt");
            FileInputStream in=new FileInputStream(file);
            ObjectInputStream ois=new ObjectInputStream(in);
            Student student=(Student)ois.readObject();
            System.out.println(student);
            ois.close();
            in.close();
        }

    解决问题: 当序列化完成后,后期升级程序中的类(Student),此时再反序列化时会出现异常

    解决方案:(给这个类加个随机版本号就行了)

    public class Student implements Serializable {
        private static final long serialVersionUID = -1003763572517930507L;

    三,额外再补充一个数据流

    DataOutputStream/DataInputStream(特别适合读取/写入在网络传输过程中的数据流)

    DataOutputStream 继承OutputStream,专门用于把基本java数据类型写入输出流。提供了writeXXX 写入基本java数据类型

    写入:

    public static void main(String[] args) throws IOException, ClassNotFoundException {
            File file=new File("D:\111\a.txt");
            FileOutputStream out=new FileOutputStream(file);
            DataOutputStream dos=new DataOutputStream(out);
            dos.writeInt(1);
            dos.writeUTF("哈喽");
            out.close();
            dos.close();
        }

    DataInputStream 继承于InputStream,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型

    读取:(顺序与写入的顺序要一致)

    public static void main(String[] args) throws IOException, ClassNotFoundException {
            File file=new File("D:\111\a.txt");
            FileInputStream in=new FileInputStream(file);
            DataInputStream dis=new DataInputStream(in);
            System.out.println(dis.readInt());
            System.out.println(dis.readUTF());
        }
  • 相关阅读:
    MATLAB 2019a 安装包及安装教程
    三角形最大周长
    两数的和
    “精致”的数
    总分最高的学生姓名和各科成绩
    列表元素改写
    统计单词个数
    凯撒密码
    Django入门学习--配置路由(urls)
    Django入门学习--熟悉配置信息
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10832106.html
Copyright © 2020-2023  润新知