IO流(缓冲流)

发布于:2024-06-12 ⋅ 阅读:(79) ⋅ 点赞:(0)


 

1.字节缓冲流

  • 原理:字节缓冲输入流自带8KB缓冲池;字节缓冲输出流自带8KB缓冲池
public static void main(String[] args) throws IOException {
        try(
            InputStream is = new FileInputStream("D:\\pt\\123.jpg");
            //1.定义一个字节缓冲输入流包装原始的字节输入流
            InputStream bis = new BufferedInputStream(is,8192 * 2);

            OutputStream os = new FileOutputStream("C:\\hhh\\123.jpg");
            //2.定义一个字节缓冲输出流包装原始的
            OutputStream bos = new BufferedOutputStream(os,8192 * 2);
        ){

        byte[] buffer = new byte[1024];

        int len;//记住每次读取了多少个字节
        while ((len = bis.read(buffer)) != -1){
            bos.write(buffer,0,len);
        }
            System.out.println("复制完成!");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

2.字符缓冲流

BufferedReader(字符缓冲输入流)
  • 作用:自带8K的字符缓冲池,可以提高字符输入流读取字符数据的性能
public static void main(String[] args) {
        try (
                FileReader fr = new FileReader("src/666.txt");
                //创建一个字符缓冲输入流包装原始的字符输入流
                BufferedReader br = new BufferedReader(fr)
        ){
//            char[] buffer = new char[3];
//            int len;
//            while ((len = fr.read(buffer)) != -1){
//                System.out.println(new String(buffer, 0, len));
//            }
//            System.out.println(br.readLine());
//            System.out.println(br.readLine());
//            System.out.println(br.readLine());

            String line; //记住每次读取的一行数据
            while ((line = br.readLine()) != null){
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
BufferedWriter(字符缓冲输出流)
 public static void main(String[] args) {
        try (
                Writer fw = new FileWriter("src/666.txt",true);
             //
             BufferedWriter bw = new BufferedWriter(fw);

        ){

            fw.write("123");
            fw.write("6");
            fw.write("wcw");
            bw.newLine();//换行

            fw.write("123");
            fw.write('a');
            bw.newLine();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.案例:恢复文本的序号顺序到新文件中

public static void main(String[] args) {
        try (

             BufferedReader br = new BufferedReader(new FileReader("src/666.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("src/123.txt"));

        ){
            //1.定义一个ArrayList集合存放每段内容
            List<String> data = new ArrayList<>();

            //2.按照每行读取内容,存入到集合
            String line;
            while((line = br.readLine()) != null){
                data.add(line);
            }

            //3.进行排序
            Collections.sort(data);
            System.out.println(data);

            //4.遍历集合存入到新文件
            for (String l : data) {
                bw.write(l);
                bw.newLine();
            }


        } catch (IOException e) {
            e.printStackTrace();
        }
    }


网站公告

今日签到

点亮在社区的每一天
去签到