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();
                }
            }
        }

    }
}
相关文章
|
2月前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
56 9
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
95 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
3月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
49 1
|
3月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
119 1
|
4月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
259 12
|
3月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
71 0
|
3月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
44 0
|
1天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
30 17
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
13天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。