Java BufferedOutputStream 类
- BufferedOutputStream的功能:
BufferedOutputStream
类在java.io
包中,用于高效字节写入,通过维护一个内部缓冲区来减少磁盘访问次数。 - 创建和使用BufferedOutputStream:通过与
FileOutputStream
结合创建BufferedOutputStream
,可选指定缓冲区大小,主要用于文件写入。 - BufferedOutputStream的主要方法:包括
write()
方法写入数据,flush()
方法强制写入数据到文件,并通过close()
方法关闭流。
java.io
包中的 BufferedOutputStream
类与其他输出流一起使用,以更高效地以字节形式写入数据。
它扩展了抽象类 OutputStream
。
BufferedOutputStream 的工作原理
BufferedOutputStream
维护一个内部 缓冲区,大小为 8192 字节。
在写操作期间,字节被写入内部缓冲区而非磁盘。一旦缓冲区被填满或流被关闭,整个缓冲区的内容将被写入磁盘。
因此,与磁盘的通信次数减少了。这就是为什么使用 BufferedOutputStream
写入字节会更快。
创建 BufferedOutputStream
为了创建一个 BufferedOutputStream
,我们首先必须导入 java.io.BufferedOutputStream
包。一旦我们导入了包,就可以按照下面的方法创建输出流。
// 创建一个 FileOutputStream
FileOutputStream file = new FileOutputStream(String path);
// 创建一个 BufferedOutputStream
BufferedOutputStream buffer = new BufferOutputStream(file);
在上面的例子中,我们用名为 file
的 FileOutputStream
创建了一个名为 buffer
的 BufferdOutputStream
。
这里,内部缓冲区的默认大小为 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 文档)。