Java I/O流(I/O流,节点流+包装流)

概念:

节点流:从一个特定的源读写数据,比如FileReader,FileWriter,都是对文件源进行读写

包装流(处理流):包装已经存在的流(节点流/包装流),使其功能更强大,不直接连接数据源,是将已存在的流和程序连接起来

以BufferedReader为例:从其源码中可以看到BufferedReader类有Reader类型的属性,所以可以包装所有的继承自Reader的流

节点流和处理流的区别和联系

①节点流是底层流是低级流,直接连接数据源

②包装流包装节点流可以消除不同类型节点流的实现差异,也可以提供更方便的方法完成输入输出

③包装流对节点流进行包装,使用了修饰器设计模式,不会与数据源直接相连

处理流(BufferedReader 和 BufferedWriter)

属于字符流,按照字符读取数据 ,不能用来处理二进制文件,关闭时仅关闭外层流即可

package com.edu.reader_;

import java.io.*;

/**
 * @author mtl121
 * @version 1.0
 */
public class BufferedReader_ {
    public static void main(String[] args) throws IOException {

        String filename = "e:/reame1.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
        String line;
        //BufferedReader提供的方法
        while((line = bufferedReader.readLine()) != null){
            System.out.println(line);
        }
        //只需要关闭外层流,因为底层会自动去关闭节点流
        bufferedReader.close();
    }
}
package com.edu.reader_;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author mtl121
 * @version 1.0
 */
public class BufferedWriter_ {
    public static void main(String[] args) throws IOException {
        String content = "  hell,一个我哩个i熬过i奥";
        String filename = "e:/a.txt";
        //当我们想要追加而不是覆盖的时候,是在节点流控制
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filename,true/*在这里控制*/));

        bufferedWriter.write(content);
        bufferedWriter.newLine();
        bufferedWriter.write("java 攻城狮·~");

        bufferedWriter.close();
    }
}

案例使用BufferedReader和BufferedWriter 实现文件拷贝:

package com.edu.reader_;

import java.io.*;

/**
 * @author mtl121
 * @version 1.0
 */
public class Buffercopy {
    public static void main(String[] args) {

        //使用BufferedReader 和BufferedWriter不要去操作二进制文件{音频,doc,pdf等}, 可能会造成文件损坏
        String offfile = "e:/reame1.txt";
        String endfile = "e:/a.txt";
        
        BufferedReader br = null;
        BufferedWriter bw = null;

        try {
            br = new BufferedReader(new FileReader(offfile));
            bw = new BufferedWriter(new FileWriter(endfile));
            String line;
            while((line = br.readLine()) != null) {
                bw.write(line);
                //readLine仅仅是将一行数据写入,没有换行
                bw.newLine();
            }
        }  catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(br != null){
                    br.close();
                }
                if (bw != null) {
                    bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

处理流(BufferedInputStream 和 BufferedOutputStream),同BufferedReader一样,它可以接受一切InputStream的子类,但是InputStream属性不是定义在BufferedinputStream里面,而是定义在他的父类FilterinputStream里面,同理BufferedOutputStream(看源码)

BufferedInputStream是字节流,在创建时,回创建一个内部缓冲区数组,默认缓冲区大小是8M

BufferedOutputStream是字节流,实现缓冲的输出流可以将多个字节写入底层输出流中,而不是为每个字节的写入去调用底层系统 

                                                                                                                       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meikesibondwell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值