📜  Java IO-BufferedInputStream(1)

📅  最后修改于: 2023-12-03 15:01:30.563000             🧑  作者: Mango

Java IO - BufferedInputStream

介绍

BufferedInputStream 类是 Java 中的一种输入流,它提供了一个缓冲区来提高读取数据的效率。当从输入流中读取数据时,BufferedInputStream 会一次读取一块数据,并将其存储在内部缓冲区中。然后,当应用程序需要访问数据时,它会从缓冲区中读取,这样就避免了每次读取一个字节的开销。

BufferedInputStreamInputStream 类的一个装饰器类,在 InputStream 的基础上添加了缓冲区的功能。它可用于提高读取数据的性能,特别是当应用程序需要连续读取大量数据时。

使用方法

要使用 BufferedInputStream,首先需要创建一个输入流对象,然后再将其传递给 BufferedInputStream 的构造函数。以下是创建 BufferedInputStream 的一些常见方式:

// 从文件创建 BufferedInputStream
InputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

// 从网络连接创建 BufferedInputStream
InputStream inputStream = socket.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

// 从其他输入流创建 BufferedInputStream
BufferedInputStream bufferedInputStream = new BufferedInputStream(otherInputStream);

创建 BufferedInputStream 后,就可以使用其提供的方法来读取数据了。以下是一些常见的方法:

int bytesRead = bufferedInputStream.read(); // 读取一个字节,返回读取的字节数据,若已到达流的末尾,则返回 -1
byte[] buffer = new byte[1024];
int bytesRead = bufferedInputStream.read(buffer); // 读取多个字节,将数据存储在指定的字节数组中,并返回实际读取的字节数
boolean markSupported = bufferedInputStream.markSupported(); // 检查输入流是否支持标记操作
bufferedInputStream.mark(1024); // 在当前位置设置标记,允许后续调用 reset() 方法来返回该位置
bufferedInputStream.reset(); // 将流的位置重置为最近的标记位置
void close() throws IOException; // 关闭输入流及其关联的资源
示例代码

以下是一个使用 BufferedInputStream 读取文件内容的示例代码:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) {
        try {
            InputStream inputStream = new FileInputStream("file.txt");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            int bytesRead;
            byte[] buffer = new byte[1024];
            while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }

            bufferedInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们创建了一个 BufferedInputStream 来读取名为 "file.txt" 的文件内容,并使用 System.out.write() 将读取的数据输出到控制台。

总结

BufferedInputStream 是用于提高数据读取性能的输入流类。它通过使用一个内部缓冲区来减少对底层输入流的实际读取次数,从而提高了读取大量数据时的性能。使用 BufferedInputStream 可以减少 I/O 操作的开销,特别是当从文件或网络中读取数据时。