java中的IO缓冲流(高效流)---原始流的升级版

简介: 直白理解:就是原先传输的只是水管慢慢传,现在加上了一个水塔,可以提前缓存更多的数据。

一、知识点解释:

1.什么是缓冲流?

答:就是比原始流(加File的流)传输效率更加快的流。

优点:

1.自带缓冲区,读写性能更加强悍

2.自带8k缓冲区,原始流是1k

直白理解:就是原先传输的只是水管慢慢传,现在加上了一个水塔,可以提前缓存更多的数据。

2.语法?

答:和原始流差不多。一样用到多态的方法。抽象类前面加上Buffere就好了

字节缓冲输入流(BuffereInputStream

字节缓冲输出流(BuffereOutputStream

字符缓冲输入流(BuffereReader

字符缓冲输出流(BuffereWriter

直白理解:就是在原始流一样语法,然后多加一条加强语句就好了

二、代码例子:

1.缓冲字节流

代码解释:这里用一个文件复制的例子,里面包含了字节输入和字节输出流去理解。结合数组来用,就是字节流速度达到了最快的程度。下面代码里面有教快速的数组读写方法和一个一个字节的缓慢读取方法

例子:

package bao;
import java.io.*;
public class Test {
    public static void main(String[] args) throws Exception {
        //1.创建要复制的文件地址
        InputStream in = new FileInputStream("D:\\java_base\\SE\\src\\bao\\大富豪.txt");//原始流语句
        InputStream bin = new BufferedInputStream(in);//加上高级缓冲流语句
        //2.创建要粘贴到的目标地址
        OutputStream out = new FileOutputStream("D:\\java_base\\SE\\src\\bao\\继承者.txt");//原始流语句
        BufferedOutputStream bout = new BufferedOutputStream(out);//加上高级缓冲流语句
        //3.中介管道转移数据
        //传输快速的数组方法。缓慢的读写方法放在其他知识点下面了
        byte[] bytes = new byte[1024];//数据交接的桶,1024大小
        int len;//记录每次读取的字节
        while ((len = bin.read(bytes))!=-1){//读
            bout.write(bytes,0,len);//写
        }
        //关闭流
        bin.close();
        bout.close();
    }
}
//其他知识点:代码每次运行都会覆盖之前的数据,如果想不被覆盖,就在原始输出流地址的后面加上true就可以了。
//传输缓慢的一个一个字节读写的方法
/*
 int b;
     while ((b=bin.read())!=-1){
        bout.write(b);
          }*/

素材



运行结果:



2.缓冲字符流

代码解释:缓冲字符流比原始流读写更加的快速。而且新增了一个readLine(行读取)功能。字节流和字符流代码功能基本一样,只要改抽象类和基本数据类型------字节用byte,字符用char就好了

例子:

字符缓冲输入流(读取):

package bao;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
public class Test {
    public static void main(String[] args) throws Exception {
        //1.原始流:创建读取文件的对象
        Reader fr = new  FileReader("D:\\java_base\\SE\\src\\bao\\大富豪.txt");
        //2.缓冲流:给原始流加上
        BufferedReader br = new BufferedReader(fr);
        String line;//缓冲桶
        while ((line = br.readLine())!=null){//读文件数据内容
            System.out.println(line);//输出
        }
        br.close();//关闭流
    }
}

素材:



运行结果:

第二行:锦瑟无端五十弦,一弦一柱思华年

第三行:庄生晓梦迷蝴蝶,望帝春心托杜鹃

ADFASF985

字符缓冲输出流(写入):

例子:

package bao;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test {
    public static void main(String[] args) throws IOException {
        //1.原始流。创建要写入数据的对象
        Writer fw = new FileWriter("D:\\java_base\\SE\\src\\bao\\风花雪月.txt");//每次写入都会覆盖之前的,本行括号行尾里面加上true就好了
        //2.缓冲流。给原始流加强
        BufferedWriter bw = new BufferedWriter(fw);
        //3.单独写入数据
        bw.write("天亮了啊");//只能单独写入数字
        bw.newLine();//换行
        bw.write('K');//只能单独写入一个字节
        bw.newLine();//换行
        //4.大量写入数据。用到数组
        char[] chars ="今日海棠花未眠kk99,4332".toCharArray();
        bw.write(chars);//把数组的全部写进去。也可以截取写进去
        bw.write("\r\n");//换行
        bw.close();//关闭流
    }
}

运行结果:

天亮了啊

K

今日海棠花未眠kk99,4332


旁白:缓冲流和原始流写法差不多,就是在原始流写好的基础上加上一条缓冲流语句。这个语句就是抽象类前面加上这个就可以了Buffere。缓冲流还多加了一条语法(行读取)的读写Line

目录
相关文章
|
1月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
29天前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
37 1
|
14天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
8天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
22天前
|
Oracle Java 关系型数据库
【颠覆性升级】JDK 22:超级构造器与区域锁,重塑Java编程的两大基石!
【9月更文挑战第6天】JDK 22的发布标志着Java编程语言在性能和灵活性方面迈出了重要的一步。超级构造器和区域锁这两大基石的引入,不仅简化了代码设计,提高了开发效率,还优化了垃圾收集器的性能,降低了应用延迟。这些改进不仅展示了Oracle在Java生态系统中的持续改进和创新精神,也为广大Java开发者提供了更多的可能性和便利。我们有理由相信,在未来的Java编程中,这些新特性将发挥越来越重要的作用,推动Java技术不断向前发展。
|
24天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
29天前
|
设计模式 算法 Java
【揭秘】如何巧妙运用Java模板方法模式,让你的代码优雅升级?
【8月更文挑战第30天】模板方法模式是一种行为型设计模式,它定义了算法的骨架并将某些步骤延迟到子类中,使子类能在不改变算法结构的情况下重定义特定步骤。此模式适用于具有共同结构但细节不同的场景,如角色升级系统。通过定义一个抽象类 `Character` 包含模板方法 `levelUp` 和抽象步骤方法,子类如 `Warrior` 和 `Mage` 可以实现具体逻辑。这种方式提供了良好的扩展性,确保算法结构不变,同时保持系统的稳定性和一致性,在数据处理和业务流程管理中广泛应用。
44 2
|
1月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
28 2
|
1月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
1月前
|
NoSQL Java Redis
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常