Java IO流 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter

Java IO流 打印流 PrintStream PrintWriter
Java IO流 序列化流 ObjectOutputStream ObjectInputStream
Java IO流 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
Java IO流 字符流 目录拷贝
Java IO流 字符流 FileWriter
Java IO流 字符流 FileReader
Java IO流 字节流 FileInputStream
Java IO流 字节流 FileOutputStream

底层自带了长度为8192的缓冲区调高性能
把基本流包装成高级流,提高读取数据的性能

字节缓冲流


private static int DEFAULT_BUFFER_SIZE = 8192;
👇
public BufferedInputStream(InputStream in) {
    this(in, DEFAULT_BUFFER_SIZE);
}
👇
public BufferedInputStream(InputStream in, int size) {
    super(in);
    if (size <= 0) {
        throw new IllegalArgumentException("Buffer size <= 0");
    }
    buf = new byte[size]; // 底层是8192大小的字节数组
}

创建对象

创建对象传入一个基本流,因为缓冲流是在基本流上做的封装

// 字节输入缓冲流
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));
// 字节输出缓冲流
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath));

读写操作

读写方法与基本流是一样的,提供一个拷贝文件例子👇

public class BufferedStream {

    public static void main(String[] args) throws IOException {
        String srcPath = "src/main/java/io_stream/a.txt";
        String destPath = "src/main/java/io_stream/b.txt";
        testBufferedStream(srcPath, destPath);
    }

    public static void testBufferedStream(String srcPath, String destPath) throws IOException {
        BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(srcPath));
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(destPath));

        byte[] bytes = new byte[1024];
        int len;
        while((len = inputStream.read(bytes)) != -1){
            outputStream.write(bytes, 0, len);
        }

        outputStream.close();
        inputStream.close();
    }
}

字符缓冲流

private static int defaultCharBufferSize = 8192;
👇
public BufferedReader(Reader in) {
    this(in, defaultCharBufferSize);
}
👇
public BufferedReader(Reader in, int sz) {
     super(in);
     if (sz <= 0)
         throw new IllegalArgumentException("Buffer size <= 0");
     this.in = in;
     cb = new char[sz]; // 底层是8192大小的字节数组,注意与字节缓冲流的区别
     nextChar = nChars = 0;
 }

创建对象

创建对象传入一个基本流,因为缓冲流是在基本流上做的封装

// 字符输入缓冲流
BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
// 字符输出缓冲流
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(path));

读写操作

字符缓冲流在基本的字符流之上提供了两个特有的方法

  • String readLine()        读取一行数据,如果没有数据可读了,会返回null
  • void newLine()            跨平台换行

readLine()一次读一整行,遇到回车换行结束,但不会把回车换行读取到内存中,所以拷贝时需要newLine()来手动换行
继续提供一个拷贝例子👇

public class BufferedStream {

    public static void main(String[] args) throws IOException {
        String srcPath = "src/main/java/io_stream/a.txt";
        String destPath = "src/main/java/io_stream/b.txt";
        testBufferedStream(srcPath, destPath);
    }

    public static void testBufferedStream(String srcPath, String destPath) throws IOException {
        // 字符输入缓冲流
        BufferedReader bufferedReader = new BufferedReader(new FileReader(srcPath));
        // 字符输出缓冲流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(destPath));

        String line;
        while((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line);
            bufferedWriter.newLine();
        }

        bufferedWriter.close();
        bufferedReader.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值