IO的分类
java程序中,对于数据的输入输出操作以流的方式进行。
1、按操作数据单位分为字节流和字符流
2、根据流向不同分为输入流和输出流input, output是对于内存来说的,从磁盘读取文件input, 往磁盘输入文件ouput。
3、根据流的角色不同分为节点流和处理流(包装流)
输入输出流
FileInputStream
FileOutputStream
FileReader
FileWriter
节点流和处理流
节点流和处理流是Java I/O中的两种不同类型的流。
节点流(也称为原始流)处理的是二进制数据,它们与特定的I/O设备直接相连。例如,一个输入流可以直接连接到文件、键盘、网络等设备。Java API提供了四种节点流:FileInputStream,FileOutputStream,ByteArrayInputStream和ByteArrayOutputStream。
处理流(也称为高级流)是建立在节点流之上的流,它们提供了对输入和输出数据进行过滤或处理的能力。换句话说,它们可以对原始数据进行操作,例如缓冲、压缩、加密等。Java API提供了很多种处理流,包括BufferedReader,BufferedWriter,DataInputStream,DataOutputStream,ObjectInputStream,ObjectOutputStream等。
总的来说,节点流用于输入和输出数据,而处理流用于对输入和输出数据进行处理和过滤。同时,节点流和处理流通常被组合使用,以便在I/O操作中实现更多的功能。
处理流-BufferedReader 和 BufferedWrite
处理流-BufferedInputStream 和 BufferedOutp
对象流-ObjectInputStream 和 ObjectOutputStrea
序列化和反序列化
序列化是在保存数据时,保存数据的值和数据类型
反序列化是在恢复数据时,恢复数据的值和数据类型
通常,在网络传输或数据存储过程中,需要进行序列化和反序列化操作。在网络传输中,序列化可以将对象转换成网络传输协议支持的格式,例如HTTP和TCP协议支持的二进制格式。在数据存储中,序列化可以将对象转换成数据库支持的格式,例如将对象转换成XML格式或JSON格式并存储在文件或数据库中。
反序列化可以将序列化后的数据重新转换成原始对象,使得数据能够被程序读取和使用。例如,在网络传输中,反序列化可以将接收到的二进制数据转换成可读的对象;在数据存储中,反序列化可以将从数据库中读取的JSON格式数据转换成原始对象,以便程序使用。
ObjectOutputStream 提供 序列化功能
ObjectInputStream 提供 反序列化
标准输入输出流
system.in 类型inputstream 默认设备 键盘
system.out 类型printstream 默认设备 屏幕
转换流-InputStreamReader 和 OutputStreamWrit
将字节流转化成字符流,也可以进一步包装BufferedReader
打印流-PrintStream 和 PrintWrite
只有输出,没有输入