Java重点 | IO流中的缓冲流专属和转换流专属

简介: 经过上篇文章,我们已经学会了IO流中的文件专属流,那么我们继续学习,本文将详细介绍缓冲流专属和转换流专属的配合使用。主要是从下面两个方面讲解,BufferedReader读,和InputStreamReader转换流联合使用,和BufferedWriter写,和OutputStreamWriter转换流联合使用。那么让我们来一起学习吧。

缓冲流专属和转换流

BufferedReader读,和InputStreamReader转换流联合使用

**BufferedReader:
带有缓冲区的字符输入流。
使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲。**

BufferedReader的括号里面要求传的是Reader(字符输入流),如果要传字节输入流,就要使用转换流(InputStreamReader),使字节输入流转成字符输入流。

public class BufferedReader读_加转换流 {
    public static void main(String[] args) {
        BufferedReader br= null;
        FileReader fr = null;
        FileInputStream fis = null;
        InputStreamReader isr = null;
        try {
            /* 这里面演示的是BufferedReader传入一个Reader
            这个构造方法里面只能传入Reader类型的,如果要传入字节输入流,就要用转换流转换
            fr = new FileReader("D:\\AJava\\新建文件夹\\aaa");
            br = new BufferedReader(fr);*/

            //这个构造方法里面只能传入字符输入流类型。传入字节输入流要使用转换流,把字节输入流转换成字符入出流
            //演示传入字节输入流 用转换流
            //创建字节输入流对象
            fis = new FileInputStream("aa");
            //创建转换流对象(字节输入转换成字符输入)
            isr= new InputStreamReader(fis);
            //创建BufferdReader对象
            br = new BufferedReader(isr);
            /*上面的合并在一起写 也就不用上面的赋值null了
            //当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流。外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流。
            br = new BufferedReader(new InputStreamReader(new FileInputStream("aa")));*/

            //readLine()读取一行内容,当读到末尾没有内容的时候,返回null
            String aa =null;
            while ((aa = br.readLine())!=null){
                System.out.println(aa);
            }
            /*String s = br.readLine();
            System.out.println(s);读一行内容*/

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fr != null) {
                try {
                    br.close(); //对于包装流来说,只需要关闭最外层的流就行,里面的节点会自动关闭。
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
    

BufferedWriter写,和OutputStreamWriter转换流联合使用

**BufferedWriter :带有缓冲的字符输出流。
OutputStreamWriter:转换流。**

BufferedWriter 括号里面要求传的是writer(字符输出流),如果要传字节输出流,就要使用转换流(OutputStreaWriter),使字节输出流转换成字符输出流。

public class BufferedWriter写_加转换流 {
    public static void main(String[] args) {
        BufferedWriter bw  =null;
        try {
            /*传入字符writer类型的输出流
            bw = new BufferedWriter(new FileWriter("aa",true));*/

            //里面只能传入字符输出流类型。传入字节输出流要使用转换流,把字节输出流转换成字符输出流
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("JAVAse进阶/src/IO流/aa",true)));

            bw.write("我是一个大帅哥");
            bw.write("\n");
            bw.write("你好大帅哥");
            //刷新
            bw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close(); //关闭最外层
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
相关文章
|
7天前
|
Java Unix Windows
|
1天前
|
存储 Java
Java的`java.io`包包含多种输入输出类
Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
7 1
|
2天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
9 2
|
3天前
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
|
4天前
|
存储 Java 测试技术
Java基础IO总结(下)
Java基础IO总结(下)
10 0
|
4天前
|
存储 Java
Java基础IO总结(上)
Java基础IO总结(上)
10 0
|
3天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
3天前
|
Java
Java并发编程:深入理解线程池
【4月更文挑战第30天】本文将深入探讨Java并发编程中的一个重要主题——线程池。我们将从线程池的基本概念入手,了解其工作原理和优势,然后详细介绍如何使用Java的Executor框架创建和管理线程池。最后,我们将讨论一些高级主题,如自定义线程工厂和拒绝策略。通过本文的学习,你将能够更好地理解和使用Java的线程池,提高你的并发编程能力。
|
1天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
9 3
|
2天前
|
存储 安全 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第1天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细分析线程安全问题的根源,以及如何通过合理的设计和编码实践来避免常见的并发问题。同时,我们还将探讨如何在保证线程安全的前提下,提高程序的并发性能,包括使用高效的同步机制、减少锁的竞争以及利用现代硬件的并行能力等技术手段。