您的位置:

Java InputStream介绍

一、InputStream概述

Java的InputStream是输入流的抽象基类,在java.io包中定义。它是所有输入流的父类。一个输入流可以有不同的来源,例如文件、网络连接、内存缓冲区等。输入流用于从数据源中读取数据。

InputStream使用一些通用的方法来读取字节数据。其中最基本的方法是read()。read()方法从输入流中读取一定数量的字节数,并返回读取字节数量。

InputStream的实现子类包括FileInputStream, ByteArrayInputStream, StringBufferInput等等。Java通常使用InputStream和OutputStream类来处理与字节流相关的输入/输出(I/O)操作。

二、InputStream的常用方法

1. read()

int b = inputStream.read();
while(b != -1) {
    // do something with byte
    b = inputStream.read();
}

read()方法会从输入流中读取一个字节的数据。如果已经到达流的结束,则返回-1。该方法最常用于循环中,直到读取到-1为止。

2. read(byte b[])

byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
while(bytesRead != -1) {
  // 处理buffer
  bytesRead = inputStream.read(buffer);
}

该方法从输入流中读取数据到一个缓冲区(byte数组)中。返回值是实际读取的字节数。如果返回-1,则表示已到达流的末尾。

3. skip(long n)

// Skip the first n bytes
inputStream.skip(1024);

该方法跳过并丢弃输入流中的n个字节。该方法返回实际跳过的字节数。如果在跳过的字节数小于n时到达流的末尾,则返回值为比n小的正整数。

4. available()

int count = inputStream.available();
byte[] buffer = new byte[count]; 
inputStream.read(buffer);

available()方法返回输入流中可读取字节数的估计值。虽然该值不保证准确,但是具有参考意义。

三、InputStream使用示例

下面是一个使用InputStream读取文件内容的示例:

try (InputStream input = new FileInputStream("file.txt")) {
    byte[] buffer = new byte[1024];
    int bytesRead = input.read(buffer);
    while (bytesRead != -1) {
        // 处理buffer
        bytesRead = input.read(buffer);
    }
} catch (IOException e) {
    // 处理错误
}

在代码示例中,使用try-with-resources语句打开文件输入流。接着,定义一个缓冲区并从输入流中读取字节数据,处理读取到的字节,直到读取全部数据或发生异常。

在这个示例中,读取的字节数是缓冲区的大小,但是如果需要,可以更改缓冲区大小,以满足实际需要。

四、小结

Java的InputStream类提供了一些基本的方法来从不同来源(例如文件、网络连接、内存缓冲区等)中读取字节数据。这使得Java程序可以轻松访问和操作这些数据源。

在读取数据时,需要注意异常处理和缓冲区的使用。例如,为了避免资源泄漏,需要使用try-with-resources语句来关闭输入流。此外,使用适当大小的缓冲区可以提高读取性能。