zoukankan      html  css  js  c++  java
  • java为什么要实现serializable序列化

    我们有时候想把一个对象写到一个文件上,实现持久化,可以这么做

    class User{
        
        String userName ;
        
        String password;
    
        public User(String userName , String passwrod) {
            this.userName = userName;
            this.password = passwrod;
        }
        
        @Override
        public String toString() {
            return "用户名:"+this.userName+ " 密码:"+ this.password;
        }
    }
    
    public class Test {
        
        public static void main(String[] args) throws IOException, Exception {
            writeObj();
        }    
    
        //定义方法把对象的信息写到硬盘上------>对象的序列化。
        public static void writeObj() throws IOException{
            //把user对象的信息持久化存储。
            User user = new User("admin","123");
            //找到目标文件
            File file = new File("/Users/chen/Downloads/obj.txt");
            //建立数据输出流对象
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            //建立对象的输出流对象
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            //把对象写出
            objectOutputStream.writeObject(user);
            //关闭资源
            objectOutputStream.close();
            
            
        }
    }

    运行时发现报错java

    Exception in thread "main" java.io.NotSerializableException: User

    要求必要需实现serializable接口,serializable接口没有任何方法,是一个标识接口。

    在user类后面implements Serializable,然后打开obj.txt文件会发现是一堆字节码文件,这是原先的对象编译后的,我们如果要看这个对象需要反序列化

    class User implements Serializable{
        
        String userName ;
        
        String password;
    
        public User(String userName , String passwrod) {
            this.userName = userName;
            this.password = passwrod;
        }
        
        @Override
        public String toString() {
            return "用户名:"+this.userName+ " 密码:"+ this.password;
        }
    }
    
    public class Test {
        
        public static void main(String[] args) throws IOException, Exception {
            writeObj();
            readObj();
        }    
    
        //定义方法把对象的信息写到硬盘上------>对象的序列化。
        public static void writeObj() throws IOException{
            //把user对象的信息持久化存储。
            User user = new User("admin","123");
            //找到目标文件
            File file = new File("/Users/chen/Downloads/obj.txt");
            //建立数据输出流对象
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            //建立对象的输出流对象
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            //把对象写出
            objectOutputStream.writeObject(user);
            //关闭资源
            objectOutputStream.close();
            
            
        }
        
        //把文件中的对象信息读取出来-------->对象的反序列化
        public static void readObj() throws  IOException, ClassNotFoundException{
            //找到目标文件
            File file = new File("/Users/chen/Downloads/obj.txt");
            //建立数据的输入通道
            FileInputStream fileInputStream = new FileInputStream(file);
            //建立对象的输入流对象
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            //读取对象信息
            User user = (User) objectInputStream.readObject(); //创建对象肯定要依赖对象所属 的class文件。
            System.out.println("对象的信息:"+ user);
        }
    }
    View Code

    输出:

    对象的信息:用户名:admin 密码:123

  • 相关阅读:
    ubuntu 11.10下 配置环境变量 对 adb无效
    一个NB的博客 个人感觉非常有用
    SVN 错误提交配置文件,
    代码格式真的很重要
    图解DB2体系结构(转)
    DB2基本概念——实例,数据库,模式,表空间
    DB2 数据库安全总述
    DB2关于标识列(自增列)的对比试验、使用示例
    DB2的SQL编程(转)
    DB2 数据类型(转)
  • 原文地址:https://www.cnblogs.com/cracker13/p/9518227.html
Copyright © 2011-2022 走看看