zoukankan      html  css  js  c++  java
  • java 对象输入输出流


              对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息。 对象的持久化。 比如:用户信息。
       
               ObjectInputStream   : 对象输入流
       
               ObjectOutPutStream  :对象输出流  
       
             对象输入输出出流的使用注意点:
           1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化实现Serializable接口,Serializable接口没有任何方法 ,是一个标记接口
           2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。
           3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量
           4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。

    package com.beiwo.io;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    
    
    class Cat implements Serializable {
        
        private static final long serialVersionUID = 1L; // 保证所取对象信息唯一
        
        String name;
        public Cat(String name) {
            // TODO 自动生成的构造函数存根
            this.name = name;
        }
        
        @Override
        public String toString() {
            // TODO 自动生成的方法存根
            return "cat.name" + this.name;
        }
    }
    
    class Person implements Serializable {
        
        private static final long serialVersionUID = 1L; // 保证所取信息唯一
        
        String name;
        int age;
        int id;
        String sex;
        // 如果不想把某些信息存入磁盘中 ,则需要通过transient关键字修饰成员变量
        transient String password; 
        Cat cat;
        // 构造方法
        public Person(String name, int age, int id, String password, Cat cat){
            this.name = name;
            this.age = age;
            this.id = id;
            this.password = password;
            this.cat = cat;
        }
    }
    public class demo4 {
    
        /**
         * @param args
         * @throws IOException 
         * @throws ClassNotFoundException 
         */
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            // 调用方法
            writeObject();
            readObject();
        }
        // 读取数据到磁盘中
        public static void readObject() throws IOException, ClassNotFoundException {
            // TODO 自动生成的方法存根
            // 找到目标文件
            File file = new File("C:\Users\cdlx2016\Desktop\2\cc.txt");
            // 建立通道
            FileInputStream inputStream = new FileInputStream(file);
            // 创建对象输入流
            ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
            // 读取数据
            Person person = (Person)objectInputStream.readObject();
            
            // 打印数据
            System.out.println("name: " + person.name + " age: " + person.age + " id: " + person.id + " 密码:" + person.password + " cat: " + person.cat);
            
            // 关闭数据
            objectInputStream.close();
            
        }
        
        // 写入对象
        private static void writeObject() throws IOException {
            // 找到目标文件
            File file = new File("C:\Users\cdlx2016\Desktop\2\cc.txt");
            // 建立通道
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            // 创建对象输出流
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            // 创建对象
            Person person = new Person("李四", 20, 1203, "369852", new Cat("大肥"));
            // 写入数据
            objectOutputStream.writeObject(person);
            // 关闭流
            objectOutputStream.close();
            
        }
    
    }
  • 相关阅读:
    11.22
    python之字典(dict)
    Version Control
    java_实现一个类只能声明一个对象
    javase-位运算符
    javase-整数变量的交换
    URI和URL的关系与区别
    http解析
    函数式语言
    MyIASM和Innodb引擎详解
  • 原文地址:https://www.cnblogs.com/Liang-Haishan216/p/6148946.html
Copyright © 2011-2022 走看看