[2025.1.17 JavaSE学习]字节I/O流 && 字符I/O流 && 节点流

I/O Stream中常用的类

字节输入输出流

  • 该抽象类是所有类字节输入流的超类
  • 常用子类如下:
    • FileInputStream:文件输入流
    String filePath = "test.txt";
    int readData = 0;
    int readLen = 0;//读取字节数组长度
    byte[] buffer = new byte[8];//一次读取8个字节
    FileInputStream fileInputStream = null;
    try{
    	fileInputStream = new FileInputStream(filePath);
    	//while((readData = fileInputStream.read()) != -1){
    		//System.out.print((char)readData);
    		//上述会产生乱码,因为一个字符由几个字节组成,只读一个字节进行转换无法得到字符数据(最好用字符流)
    	//}
    	while((readLen = fileInputStream.read(buffer)) != -1){
    		System.out.print(new String(buffer, 0, readLen));
    	}
    }catch(IOException e){
    	e.printStackTrace();
    }finally{
    	fileInputStream.close();
    }
    
    • BufferedInputStream:缓冲字节输入流
    • ObjectInputStream:对象字节输入流
  • 对应的输出流:
    • FileOutputStream:文件输出流
    • BufferedOutputStream:缓冲字节输出流
    • ObjectOutputStream:对象字节输出流

字符输入输出流

  • FileReader相关方法:

    • new FileReader(File/String)
    • read:每次读取单个字符并返回该字符,末尾返回-1
    • read(char []):批量读取多个字符返回读取字符数,末尾返回-1
  • FileWriter相关方法:

    • new FileWriter(File/String):覆盖模式,流的指针在首端
    • new FileWriter(File/String, true):追加模式,流的指针在尾端
    • write(int):写入单个字符
    • write(char[]):写入指定数组
    • write(char[],off,len):写入指定数组的指定部分
    • write(string):写入整个字符串
    • write(string,off,len):写入字符串指定部分
    • PS: FileWriter使用后必须关闭close或刷新flush,否则无法写入


节点流 && 处理流

节点流可以从一个特定的数据源读写数据,如FileWriter、FileReader

image


处理流(包装流)是“连接”已经存在的流(节点流or处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter

image

image

  • 如上,BufferedReader内部包装了一个Reader,可以是任何数据流,只需要是Reader的子类,包装输入流也同理(父类引用指向子类对象)
  • 这种设计模式称为修饰器模式
    • 动态扩展功能:在不修改原始类的情况下,通过修饰器类动态地添加功能
    • 包装对象:修饰器类持有原始类的引用,并在调用原始类方法前后添加额外的行为
    • 关闭处理流时,只需关闭外层流即可,例如BufferedReader,外层close底层会自动关闭底层流

两者区别和联系

  • 节点流是底层流/低级流,直接和数据源相接
  • 处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
  • 处理流对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连

处理流主要功能体现在以下两个方面

  • 性能的提高:主要以增加缓冲的形式来提高输入输出效率
  • 操作的便捷:处理流提供了一系列便捷的方法来一次输入输出大批量数据,使用更为灵活方便
posted @   Luna-Evelyn  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示