- Java中的IO流分为几种
按数据单位分类:
字节流(Byte Stream):以字节(8位二进制数)为基本单位进行数据读写。字节流适合处理所有类型的数据,包括文本、图像、音频、视频等二进制文件。抽象基类包括:
InputStream(字节输入流)
OutputStream(字节输出流)
具体的实现类如:FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream、BufferedInputStream、BufferedOutputStream等。
字符流(Character Stream):以字符(通常是16位Unicode字符)为基本单位进行数据读写,通常用于处理文本数据。字符流内部会自动处理字符编码和解码。抽象基类包括:
Reader(字符输入流)
Writer(字符输出流)
具体的实现类如:FileReader、FileWriter、CharArrayReader、CharArrayWriter、BufferedReader、BufferedWriter等。
按数据流向分类:
输入流(Input Stream):数据从外部(如文件、网络、键盘等)流向程序内部。
输出流(Output Stream):数据从程序内部流向外部(如文件、网络、显示器等)。
按流的角色分类:
节点流(Node Stream / Device Stream):直接与数据源(如文件、网络套接字、键盘、屏幕等)交互的流,如FileInputStream、FileReader等。
处理流(Wrapper Stream / Filter Stream):对其他已存在的流进行封装,提供额外功能(如缓冲、加密、压缩、格式化等)而不直接与数据源交互,如BufferedInputStream、BufferedReader、DataInputStream等。处理流通常采用装饰器模式,可以动态地添加到节点流之上形成新的流对象。
按缓冲机制分类:
无缓冲流:每次读写操作都直接与数据源进行交互,可能会造成频繁的系统调用,影响性能。
缓冲流(Buffered Stream):在流的读写操作中引入缓冲区,减少对数据源的直接访问,提高数据读写效率。如BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter等。
如果大家需要视频版本的讲解,欢迎关注我的B站: