缓冲流与打印流(字节与字符)

缓冲流与打印流(字节与字符)

1、缓冲流

首先要明确一个概念:

对文件或其他目标频繁的读写操作,效率低,性能差

使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来。

BufferedInputStream: 为另一个输入流添加一些功能,在创建BufferedInputStream时,会创建一个内部缓冲区数组,用于缓冲数据。

BufferedOutputStream,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。

BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符,数组,和行的高效读取。

BufferedWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。

1.1、字节缓冲流:

输出流和输入流:无非加一行代码,其他与之前的没有任何区别

public class Test7 {
    public static void main(String[] args) {
        byteWriter();
        byteReader();
    }
    private static void byteReader() {
        try {
            InputStream in = new FileInputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt");
            BufferedInputStream bis = new BufferedInputStream(in);
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = bis.read(bytes)) != -1) {
                System.out.print(new String(bytes, 0, len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void byteWriter() {
        try {
            OutputStream in = new FileOutputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt", true);
            BufferedOutputStream bof = new BufferedOutputStream(in);
            bof.write("我是字节缓冲流".getBytes());
            bof.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.2、字符缓冲流:

输出流和输入流:

public class Test7 {
    public static void main(String[] args) {   
        charWriter();
        charReader();
    }

    private static void charWriter() {
        BufferedWriter writer = null;
        try {
            writer = new BufferedWriter(new FileWriter("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt", true));
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            assert writer != null;
            writer.write("我是字符缓冲流");
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void charReader() {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt"));
            char[] chars = new char[1];
            int len = -1;
            while ((len = reader.read(chars)) != -1) {
                System.out.print(new String(chars, 0, len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2、打印流:

  • 字节输出打印流 PrintStream
  • 字符输出打印流 PrintWriter

代码演示:

public class Test8 {
    public static void main(String[] args) {
        bytePrint();
        charPrint();
    }

    private static void charPrint() {
        try {
            Writer writer = new FileWriter("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt");
            // 加缓存
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            // 增强打印
            PrintWriter printWriter = new PrintWriter(bufferedWriter);
            printWriter.print("我是字符打印流");
            printWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void bytePrint() {
        try {
            OutputStream out = new FileOutputStream("E:\\idea_workspace3\\yangli\\class_obj\\src\\com\\lili\\file\\lili.txt");
            // 加缓存
            BufferedOutputStream writer = new BufferedOutputStream(out);
            // 增强打印
            PrintStream printStream = new PrintStream(writer);
            printStream.print("我是字节打印流");
            printStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

posted @   JamieChyi  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示