一、标准输入流
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/652739497f92e5dfd25279aa19d0c4c3.png)
二、标准输出流
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4558875195779989a7323d96cfb1f786.png)
三、字节打印流
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7e0709c670377c114a6be2cec59c84c6.png)
四、字符打印流
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f008c6a210031e000251cfcce49b9b8.png)
五、对象序列化流
对象序列化流:
- 将对象保存到硬盘中,或者在网络中传输对象
- ObjectOutputStream和ObjectInputStream
书上解释:
对象的序列化(Serializable)是指将一个java对象转换成一个I/O流中字节序列的过程,其目的是为了将对象保存到磁盘中,或允许在网络中直接传输对象,对象序列化机制可以使内存中的java对象转换成与平台无关的二进制流,即可以将这种二进制流持久的保存在磁盘上,又可以通过网络将这种二进制传输到另一个网络节点,其他程序在获得了这种二进制流后,还可以将它恢复成原来的java对象,这种操作叫反序列化。
- 如果想让某个对象支持序列化机制,那么这个对象所在的类必须是可序列化的。
- 在Java中,可序列化的类必须实现Serializable或者Externalizable两个接口其中一个,常用的有Serializable。
- 后者性能好,但是编程的复杂度大
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2ceb46171af13477c733ae095ae06a43.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e9409326bf24556764b01b918ec811d9.png)
对象序列化:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\wokspace1\\firstwork\\123.txt"));
Student s = new Student("黑哥",30);
oos.writeObject(s);
oos.close();
反序列化对象:
readObject():
读取对象的时候,需要抛出异常:ClassNotFoundException
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\wokspace1\\firstwork\\123.txt"));
Object obj = ois.readObject();
Student s = (Student) obj;
System.out.println(s.getName()+","+s.getAge());
ois.close();