缓冲流

简介: 缓冲流

概述

什么是缓冲流

缓冲流,也叫 高效流,是对 4个 基本的 File *** 流的增强

所以也是 4个流,按照数据类型分类: 字节缓冲流: BufferedInputStream , BufferedOutputStream,字符缓冲流: BufferedReader , BufferedWriter

基本原理

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统 IO 次数,从而提高读写的效率。

字节缓冲流

构造方法

  • public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。
  • public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。
//创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("xhh.txt"));
//创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("xhh.txt"));

效率测试

直接使用 FileInputStream 与 FileOutStream 复制文件

public static void main(String[] args) throws Exception {
    long start = System.currentTimeMillis();
    FileInputStream fis  = new FileInputStream("D:/apache-echarts-4.6.0-incubating-src.zip");
    FileOutputStream fos = new FileOutputStream("newApache.zip");
    int len;
    byte[] b = new byte[1024];
    while ((len = fis.read(b)) != -1){
        fos.write(b);
    }
    fis.close();
    fos.close();
    long end = System.currentTimeMillis();
    System.out.println("时间:"+(end-start));
}
// 49

使用缓冲流复制文件

public static void main(String[] args) throws Exception {
    long start = System.currentTimeMillis();
    BufferedInputStream bis  = new BufferedInputStream(new FileInputStream("D:/apache-echarts-4.6.0-incubating-src.zip"));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("newApache.zip"));
    int len;
    byte[] b = new byte[1024];
    while ((len = bis.read(b)) != -1){
        bos.write(b);
    }
    bis.close();
    bos.close();
    long end = System.currentTimeMillis();
    System.out.println("时间:"+(end-start));
}
// 25

字符缓冲流

构造方法

  • public BufferedReader(Reader in)
  • public BufferedWriter(Writer out)
public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new FileReader("xhh.txt"));
    BufferedWriter bw = new BufferedWriter(new FileWriter("xhh.txt"));
}

特有方法

  • BufferedReader
  • public String readLine():读一行文字
  • BufferedWriter
  • public void newLine() :写一行行分隔符,由系统属性定义符号
public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new FileReader("xhh.txt"));
    String line = null;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
    br.close();
}

public static void main(String[] args) throws Exception {
    BufferedWriter br = new BufferedWriter(new FileWriter("out.txt"));
    br.write("小灰");
    br.newLine();
    br.write("灰");
    br.newLine();
    br.close();
}
相关文章
|
3月前
|
Java
缓冲流和转换流的使用【 File类+IO流知识回顾③】
这篇文章介绍了Java中缓冲流(BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter)和转换流(InputStreamReader, OutputStreamWriter)的使用,包括它们的构造方法和如何利用它们提高IO操作的效率及处理字符编码问题。
缓冲流和转换流的使用【 File类+IO流知识回顾③】
|
3月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
56 10
|
4月前
|
Java
|
4月前
|
存储 Java 索引
|
6月前
字节流和字符流
字节流和字符流
38 0
|
7月前
|
存储 自然语言处理 Java
java缓冲流、转换流、序列化流、打印流
java缓冲流、转换流、序列化流、打印流介绍
|
7月前
|
移动开发 Java Linux
IO流:字节输出流FileOutputStream的超详细用法
IO流:字节输出流FileOutputStream的超详细用法
|
存储 Java
IO流之 字节流 & 字符流
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于Java.io包中,称之为IO(输入输出)流。IO流即InputOutput的缩写。一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。httpshttps。...
198 0
|
C语言 C++ 开发者
C++输入流和输出流介绍
C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf()、fputs() 等函数向文件中写入数据。 要知道,C 语言的这套 I/O 解决方案也适用于 C++ 程序,但 C++ 并没有“偷懒”,它自己独立开发了一套全新的 I/O 解决方案,其中就包含