Java BufferedOutputStream 类用法说明及实例

本教程通过示例介绍 Java BufferedOutputStream 类以及使用方法。

本教程通过示例介绍 Java BufferedOutputStream 类以及使用方法。

java.io 包的 BufferedOutputStream 类与其他输出流一起使用以更有效地以字节为单位写入数据。

BufferedOutputStream 类扩展了 OutputStream 抽象类。

BufferedOutputStream 类是 Java OutputStream 的子类
Java BufferedOutputStream 类

BufferedOutputStream 的原理

BufferedOutputStream 内部维护一个的 8192 个字节缓冲器。

在写操作期间,BufferedOutputStream 将字节数据写入内部缓冲区而不是直接写入磁盘磁盘。一旦缓冲区被填满或流被关闭,整个缓冲区就会被写入磁盘。

BufferedOutputStream 减少了与磁盘的通信次数,因此提高了写入的效率。

创建 BufferedOutputStream

BufferedOutputStream 类位于 java.io 包中,BufferedOutputStream 类提供了构造方法创建对象。 BufferedOutputStream 都是作为其他流的包装类使用,因此构造方法中需要传入一个 OutputStream 对象。如下:

// 文件输入流
FileOutputStream file = new FileOutputStream(String path);

// 包装了文件输入流的缓冲输入流
BufferedOutputStream buffer = new BufferOutputStream(file);

在上面的例子中,我们创建了一个名为 bufferBufferdOutputStream 对象,它包装了 FileOutputStream 对象。

此处,内部缓冲区的默认大小为 8192 字节。但是,我们也可以通过以下构造方法自定义内部缓冲区的大小。

BufferedOutputStream buffer = new BufferOutputStream(file, int size);

BufferedOutputStream 的方法

BufferedOutputStream 类实现了的 OutputStream 类中的定义的所有的抽象方法。

write() 方法

  • write() - 将单个字节写入输出流的内部缓冲区
  • write(byte[] array) - 将指定数组中的字节写入输出流
  • write(byte[] arr, int start, int length) - 将指定字节数组中从 start 开始长度为 length 的数据写入输出流

示例:BufferedOutputStream 将数据写入文件

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;

public class Main {
  public static void main(String[] args) {

    String data = "This is a line of text inside the file";

    try {
      FileOutputStream file = new FileOutputStream("output.txt");
      BufferedOutputStream output = new BufferedOutputStream(file);

      byte[] array = data.getBytes();

      // Writes data to the output stream
      output.write(array);
      output.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

在上面的例子中,我们创建了一个名为 output 的缓冲输出流,通过装饰FileOutputStream 输出流与文件 output.txt 关联在一起。

然后,我们使用 write() 方法将数据写入了文件。

这里当我们成功运行程序后,output.txt 文件中填充了以下内容。

This is a line of text inside the file.

! 注意:程序中使用 getBytes() 方法将字符串转换为字节数组。

flush() 方法

flush() 方法强制输出流将缓冲区中存在的所有数据写入目标文件。例如,

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;

public class Main {
  public static void main(String[] args) {

    String data = "This is a demo of the flush method";

    try {
      FileOutputStream file = new FileOutputStream("flush.txt");
      BufferedOutputStream buffer = new BufferedOutputStream(file);

      buffer.write(data.getBytes());

      // Flushes data
      buffer.flush();
      System.out.println("Data is flushed to the file.");
      buffer.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Data is flushed to the file.

当我们成功运行程序后,字符串 This is a demo of the flush method 被写入到文件 flush.txt 中。

close() 方法

close() 方法用来关闭输出流。一旦调用了 close() 方法,我们就不能使用输入流来中的数据了。

在以上所有示例中,我们都使用了 close() 关闭文件输出流的方法。