Java中对象流(ObjectOutputStream提供序列化功能,ObjectInputStream提供反序列化功能),标准输入(System.in)和输出流(System.out)

  •  对象流

基本介绍:提供了对基本类型或对象类型的序列化和反序列化的方法

ObjectOutputStream提供序列化功能(序列化是将对象转换为字节流的过程。通过序列化,可以将对象的状态保存在文件、数据库或网络中,以便在需要的时候重新创建对象。要进行序列化,需要确保对象的类实现了java.io.Serializable接口)

ObjectInputStream提供反序列化功能(反序列化是 将字节流重新转换为对象的过程。通过反序列化,可以从文件、数据库或网络中读取对象的状态,并在内存中重新创建对象。 )
注意事项:
  1. 读写顺序要一致
  2. 要求序列或反序列化对象实现Serializeable接口
  3. 序列化对象时,默认将所有的属性都序列化,除了static和transient修饰的成员
  4. 序列化对象时,要求里面的属性的类型也要实现序列化接口(Integer...这些包装类是实现了的)
  5. 序列化具备可继承性,也就是如果某类实现了序列化,则它的所有子类也已经默认实现了序列化
ObjectOutputStream关系图

Java中对象流(ObjectOutputStream提供序列化功能,ObjectInputStream提供反序列化功能),标准输入(System.in)和输出流(System.out)_第1张图片

ObjectInputStream关系图

Java中对象流(ObjectOutputStream提供序列化功能,ObjectInputStream提供反序列化功能),标准输入(System.in)和输出流(System.out)_第2张图片

ObjectOutputStream代码:
public class ObjectOutputStream_ {
    public static void main(String[] args) throws Exception {
        //序列化后,保存的文件格式,不是存文本,而是按照他的格式来保存
        String filePath = "d:\\oos.txt";
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        //序列化数据到 d:\oos.txt
        oos.writeInt(100);// int -> Integer (实现了 Serializable)
        oos.writeBoolean(true);// boolean -> Boolean (实现了 Serializable)
        oos.writeChar('a');// char -> Character (实现了 Serializable)
        oos.writeDouble(9.5);// double -> Double (实现了 Serializable)
        oos.writeUTF("ret");//String
        //保存一个 dog 对象
        oos.writeObject(new Dog("旺财", 10, "中国", "黄色"));
        System.out.println("数据保存完毕(序列化形式)");
    }
}

class Dog implements Serializable {
    private String name;
    private int age;
    private static String  country;//static的不会被序列化
    private transient String color;//transient的不会被序列化

    public Dog(String name, int age, String country,String color) {
        this.name = name;
        this.age = age;
        this.country =country;
        this.color = color;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                ", country='" + country + '\''+
                '}';
    }
}

ObjectInputStream代码:

public class ObjectInputStream_ {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 1.创建流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\\oos.txt"));
        // 2.读取, 注意顺序
        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());
        System.out.println(ois.readDouble());
        System.out.println(ois.readUTF());
        System.out.println(ois.readObject());
        // 3.关闭
        ois.close();
        System.out.println("以反序列化的方式读取(恢复)ok~");
    }
}
  • 标准输入和输出流

标准输入流:是连接到键盘的输入流通过标准输入流,程序可以从用户输入获取数据。在 Java 中,标准输入流是一个预定义的 InputStream 对象,可以通过 System.in 访问。通常情况下,使用 Scanner 类来读取标准输入流的数据。

System.in的编译类型是InputStream,运行类型是BufferInputStream

标准输出流:是连接到控制台的输出流用于向屏幕输出数据。在 Java 中,标准输出流是一个预定义的 PrintStream 对象,可以通过 System.out 访问。通常情况下,可以使用 System.out.println() 方法将数据输出到标准输出流。

System.out的编译类型是printStream,运行类型是printStream

你可能感兴趣的:(java,开发语言)