Java中流分类及节点流、缓冲流底层源码解析

Java中文件读写及流分类

Java中对磁盘文件的读写操作过程

在Java中对磁盘文件进行读写操作时,一般分为五步走:

①创建文件对象(File类的对象)

目的是在内存层面指明磁盘中文件的路径。解释:创建该文件对象时,调用构造器传入一个字符串路径,程序运行会加载到内存,属于该文件对象属于内存层面的文件,根据字符串路径对应实际磁盘下该路径的文件。

②创建流对象(FileInputStream、FileOutputStream等这些流的对象)

通过文件对象作为构造器参数,创建流对象。
目的是根据文件对象找到对应磁盘文件,建立一个流通道(流对象),我们就可以使用这个流通道(流对象)读写磁盘文件文件。流对象有很多不同类型(如下流分类),也就是说有很多种类的流通道,不同的流通道(流对象),读写数据流也不同。比如输入流对象/输出流对象,表示的意思是把磁盘文件数据输入到内存/从内存把数据输出到磁盘文件,具体实现还有调用相应方法,如下。

③用流对象调用读写方法,对磁盘文件进行读写操作。

读使用的输入流对象,调用read(),将磁盘文件数据读取内存;写使用的输出流对象,调用write(),将内存数据写入磁盘文件。

文件复制时,输入流对象调用read(),不写参数,默认按照字符或字节一个一个读(按照字符或字节是根据流类型来的),并返回一个字符/字节,需要用字符/字节变量接收,在内存层面,将磁盘文件数据一个一个读取到内存中变量。若要读取多个数据内存,可以使用数组作为read()的参数,来指定读取数组长度的数据,给到内存中数组。
输出流对象调用write(),将内存中变量或数组中数据写到磁盘文件中,若文件不存在,创建并写入。
这其中变量/数组相当于内存中的搬运工。从磁盘文件读取数据时,读取到内存的变量/数组中,然后将内存的变量/数组中,写入到的磁盘文件。
在这里插入图片描述

④关闭流对象

创建流对象,相当于创建了流通道,属于一个物理连接,需要手动关闭。不关闭,流对象一直存在,会内存泄漏。

流分类

按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
按数据流的流向不同分为:输入流,输出流
按流的角色的不同分为:节点流,处理流

文件流(节点流),缓冲流(处理流)。处理流是对节点流的包装。

抽象基类 节点流 缓冲流
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter

在这里插入图片描述

节点流、缓冲流底层源码解析

节点流底层源码解析(以文件复制为例)

/**
 *  节点流:
 * 处理非文本文件:
 *  FileInputStream	文件字节输入流
 *  FileOutputStream文件字节输出流
 * 处理文本文件:
 *  FileReader文件字符输入流
 *  FileWriter文件字符输出流
 */
public class FileIOPutTest {
   

    /**
     * 实现对图片的复制操作
     */
    @Test
    public void testFileInputOutputStream()  {
   
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
   
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值