IO 流
1.概述
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为 “ 流 ” ,程序允许通过流的方式与输入输出设备进行数据传输。
Java中的 “ 流 ” 都位于 java. io 包中,称为IO(输入输出)流。IO流有很多种:
- 按照操作数据的不同,可以分为字节流和字符流。
- 按照数据传输方向的不同又可分为输入流和输出流。
程序从输入流中读取数据,向输出流中写出数据。在IO包中
- 字节流的输入输出流分别用 java.io. InputStream 和 java. io.OutputStream 表示。
- 字符流的输入输出流分别用 java. io.Reader 和 java. io. Writer 表示。
9 总结:IO的继承结构
- 主流分类
按照方向进行分类:输入流 输出流(相对于程序而言,从程序写数据到文件中是输出)
按照传输类型进行分类:字节流 字符流
组合: 字节输入流 字节输出流 字符输入流 字符输出流
- 字节输入流:
InputStream 抽象类,不能new,可以作为超类,学习其所提供的共性方法
FileInputStream 子类,操作文件的字节输入流,普通类
BufferedInputStream 子类,缓冲字节输入流,普通类
- 字符输入流
Reader 抽象类,不能new,可以作为超类,学习其所提供的共性方法
FileReader,子类,操作文件的字符输入流,普通类
BufferedReader,子类,缓冲字符输入流,普通类1
- 字节输出流:
OutputStream 抽象类,不能new,可以作为超类,学习其所提供的共性方法
FileOutputStream 子类,操作文件的字节输出流,普通类
BufferedOutputStream 子类,缓冲字节输出流,普通类
- 字符输出流
Writer 抽象类,不能new,可以作为超类,学习其所提供的共性方法
FileWriter,子类,操作文件的字符输出流,普通类
BufferedWriter,子类,缓冲字符输出流,普通类
序列化与反序列化
概述
程序运行时,会在内存中创建多个对象,然而程序结束后,这些对象便被当作垃圾回收了。如果希望永久保存这些对象,则可以将对象转为字节数据写入到硬盘上,这个过程称为对象序列化。为此JDK中提供了ObjectOutputStream(对象输出流)来实现对象的序列化。当对象进行序列化时,必须保证该对象实现Serializable接口,否则程序会出现NotSerializableException异常。
序列化是指将对象的状态信息转换为可以存储或传输形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后可以通过从存储区中读取或者反序列化对象的状态,重新创建该对象。
序列化:利用ObjectOutputStream,把对象的信息,按照固定的格式转成一串字节值输出并持久保存到磁盘。
反序列化:利用ObjectInputStream,读取磁盘中之前序列化好的数据,重新恢复成对象。
IO流详解