跳到主要内容

Java BufferedOutputStream 类

提示
  1. BufferedOutputStream的功能BufferedOutputStream类在java.io包中,用于高效字节写入,通过维护一个内部缓冲区来减少磁盘访问次数。
  2. 创建和使用BufferedOutputStream:通过与FileOutputStream结合创建BufferedOutputStream,可选指定缓冲区大小,主要用于文件写入。
  3. BufferedOutputStream的主要方法:包括write()方法写入数据,flush()方法强制写入数据到文件,并通过close()方法关闭流。

java.io 包中的 BufferedOutputStream 类与其他输出流一起使用,以更高效地以字节形式写入数据。

它扩展了抽象类 OutputStream

Java BufferedOutputStream 类扩展了 OutputStream 类

BufferedOutputStream 的工作原理

BufferedOutputStream 维护一个内部 缓冲区,大小为 8192 字节

在写操作期间,字节被写入内部缓冲区而非磁盘。一旦缓冲区被填满或流被关闭,整个缓冲区的内容将被写入磁盘。

因此,与磁盘的通信次数减少了。这就是为什么使用 BufferedOutputStream 写入字节会更快。

创建 BufferedOutputStream

为了创建一个 BufferedOutputStream,我们首先必须导入 java.io.BufferedOutputStream 包。一旦我们导入了包,就可以按照下面的方法创建输出流。

// 创建一个 FileOutputStream
FileOutputStream file = new FileOutputStream(String path);

// 创建一个 BufferedOutputStream
BufferedOutputStream buffer = new BufferOutputStream(file);

在上面的例子中,我们用名为 fileFileOutputStream 创建了一个名为 bufferBufferdOutputStream

这里,内部缓冲区的默认大小为 8192 字节。然而,我们也可以指定内部缓冲区的大小。

// 创建一个具有指定大小内部缓冲区的 BufferedOutputStream
BufferedOutputStream buffer = new BufferOutputStream(file, int size);

buffer 将有助于更快地将字节写入文件。

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
FileOutputStream file = new FileOutputStream("output.txt");

// 创建一个 BufferedOutputStream
BufferedOutputStream output = new BufferedOutputStream(file);

byte[] array = data.getBytes();

// 将数据写入输出流
output.write(array);
output.close();
}

catch (Exception e) {
e.getStackTrace();
}
}
}

在上面的示例中,我们创建了一个名为 output 的缓冲输出流,并与 FileOutputStream 一起使用。输出流与文件 output.txt 关联。

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

为了将数据写入文件,我们使用了 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
FileOutputStream file = new FileOutputStream(" flush.txt");

// 创建一个 BufferedOutputStream
BufferedOutputStream buffer = new BufferedOutputStream(file);

// 将数据写入输出流
buffer.write(data.getBytes());

// 将数据刷新到目的地
buffer.flush();
System.out.println("数据已刷新到文件。");
buffer.close();
}

catch(Exception e) {
e.getStackTrace();
}
}
}

输出

数据已刷新到文件。

当我们运行程序时,文件 flush.txt 将包含字符串 data 表示的文本。

close() 方法

要关闭缓冲输出流,我们可以使用 close() 方法。一旦调用了该方法,我们就不能再使用输出流来写入数据。

要了解更多,请访问 Java BufferedOutputStream (官方 Java 文档)