java缓冲流

缓冲流:

缓冲流:对原始流进行包装,以提高原始流读写数据的性能。

 

字节缓冲流:

内存读写很快,文件读写很慢减少读取磁盘的次数

字节缓冲流:提高字节流读写数据的性能(读取磁盘的次数变少)。

原理:字节缓冲输入流自带了8KB缓冲池;字节缓冲输出流也自带了8KB缓冲池

 

构造器说明
public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能
public BufferedOutputStream(OutputStream os)把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

 

package com.itheima.demo00_3字节缓冲流;

import java.io.*;

public class Demo10 {
    public static void main(String[] args) throws IOException {
        // 创建字节缓冲输入流:
        // BufferedInputStream(InputStream in): 对参数的流进行包装加强, 内部自带8192大小的数组, 真正操作文件靠参数的流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("day10\\abc\\3.txt"));



        // 创建字节缓冲输出流:
        // BufferedOutputStream(OutputStream out): 对参数的流进行包装加强, 内部自带8192大小的数组, 真正操作文件靠参数的流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("day10\\abc\\333.txt"));



        // 读写数据
        int len=-1;

        while((len=bis.read())!=-1){
            bos.write(len);
        }



        //关闭资源
        bos.close();
        bis.close();
    }
}

 
 

 

字符缓冲流:

BufferedWriter:

BufferedWriter:字符缓冲输出流。

作用:自带8K的字符缓冲池,可以提高字符输出流写字符数据的性能。

 

构造器说明
public BufferedWriter(Writer r)把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能

 

方法说明
public void newLine()换行

 

 

BufferedReader:

BufferedReader:字符缓冲输入流。

作用:自带8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能。

 

构造器说明
public BufferedReader(Reader r)把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能
方法说明
public String readLine()读取一行数据返回,如果没有数据可读了,会返回null

 

package com.itheima.demo01字符缓冲流;

import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        test01();
        test02();
    }

    public static void test02() throws IOException {
        // 字符缓冲输入流, 新增的方法: String readLine(); 读取一行,没有数据返回null;
        //      BufferedReader(Reader in): 真正操作文件靠参数传入的流, BufferedReader提供8192大小的缓冲数组
        // 读取文件:day10-io\abc\1.txt
        BufferedReader br=new BufferedReader(new FileReader("day10\\abc\\1.txt"));
        // 循环读取每一行数据
        String row=null;

        while((row=br.readLine())!=null){
            System.out.println(row);
        }

        // 关闭资源
        br.close();

    }

    public static void test01() throws IOException {
        // 字符缓冲输出流, 新增的方法: void newLine(); 换行
        // BufferedWriter(Writer out): 真正操作文件靠参数传入的流, BufferedWriter提供8192大小的缓冲数组
        // 输出文件:day10-io\abc\1.txt
        BufferedWriter bw=new BufferedWriter(new FileWriter("day10\\abc\\1.txt"));


        // 输出第一行数据
        bw.write("红烧茄子");

        // 换行
        bw.newLine();

        // 输出第二行数据
        bw.write("蒜香牛肉");

        // 换行
        bw.newLine();

        // 输出第三行数据
        bw.write("咸蛋黄茄子");

        // 换行
        bw.newLine();

        //关闭资源
        bw.close();

    }
}

 
 

案例:

拷贝出师表到另一个文件,恢复顺序(进行安装编号排序)

package com.itheima.demo01字符缓冲流;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test02 {
    public static void main(String[] args) {
        // 1.定义一个缓冲字符输入流管道与源文件接通:day10-io\abc\csb.txt
        //   定义一个缓冲字符输出管道与目标文件接通:day10-io\abc\csb2.txt
        try (BufferedReader br = new BufferedReader(new FileReader("day10\\abc\\csb.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("day10\\abc\\csb2.txt"));
        ) {
            // 2.定义一个List集合存储读取的每行数据 List<String> list
            List<String> list=new ArrayList<>();
            // 3.定义一个循环按照行读取数据,存入到List集合中去
            String row=null;
            while((row=br.readLine())!=null){
                list.add(row);
            }

            // 4.对List集合中的每行数据按照首字符编号升序排序
            Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    String s1 = o1.split("\\.")[0];
                    String s2 = o2.split("\\.")[0];

                    return Integer.compare(Integer.valueOf(s1),Integer.valueOf(s2));
                }
            });

            // 6.遍历List集合中的每个元素,用缓冲输出管道写出并换行

            for (String s : list) {
                bw.write(s);
                bw.newLine();
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }




    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值