节点流&包装流初体验

本文介绍了Java中的节点流和包装流。节点流直接操作目标文件,而包装流是对节点流的功能增强,例如BufferedReader提供了缓冲功能,方便读取文件内容。通过示例展示了如何使用BufferedReader读取文件,并指出关闭包装流时,底层会自动关闭对应的节点流。
摘要由CSDN通过智能技术生成

今天学习了包装流,我们一起来看看,神魔叫做节点流和包装流
Java流的分类
按流向分:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标文件的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
在这里插入图片描述
我们的节点流是真正的实现输入输出功能的流,我们的包装流是实现了对节点流的功能增强的功能,我们看一看到底有什么区别吧:

import java.io.*;

public class fileWriterTest {
   public static void main(String[] args) {
       FileReader fileReader=null;
       BufferedReader bufferedReader = null;
       try {
           fileReader=new FileReader("test.txt");
           bufferedReader = new BufferedReader(fileReader);
           String str;
           while((str=bufferedReader.readLine()) != null) {
               System.out.print(str );
           }
       } catch (IOException e) {
           e.printStackTrace();
       }finally {
           try {
               bufferedReader.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

我们看一下上面的代码:
1.我们先创建了一个字符的文件读取流,读取test.txt文件中的内容,然后我们创建了一个带有缓冲的包装流bufferedReader,我们可以看到包装流的构造是以节点流为基础创建的,所以参数传入的是一个节点流对象,,然后我们读取文件中的内容

2.我们可以看到,这个缓冲性质的流不需要我们进行数组的创建,也就是我们不用像用节点流如FileInputStream那样需要创建byte数组来存储读取的内容,BufferedReader这个包装流已经为我们创建好了缓冲,我们可以直接读取,方法readLine一次可以读取一行的文本内容,但不读取文件中的换行符,也就是说我们的结果中的换行是println的换行而不是文件中的换行

文件test.txt内容
在这里插入图片描述
结果:
我们用print的时候
System.out.print(str );
在这里插入图片描述
我们用println的时候
System.out.println(str );
在这里插入图片描述
3.我们需要注意我们关闭流的时候,只需要对最外层的包装流进行关闭即可,其底层会自动对其所进行包装的节点流进行自动关闭。

我们从BufferedReader源代码可以看出
在这里插入图片描述
构造方法中传入的in对象就是需要进行包装的节点流
在这里插入图片描述
自动在包装流的关流中对节点流进行了关闭,我们不用再进行关闭了!!!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值