📌  相关文章
📜  Java中的 PushbackInputStream available() 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:51.417000             🧑  作者: Mango

Java中的 PushbackInputStream available() 方法及示例

在Java I/O流中,PushbackInputStream是一个带有推回操作的输入流,它允许将最后读取的字节推回到流中。而available()方法是PushbackInputStream类中的一个方法,用于返回流中可用的字节数。

PushbackInputStream类

PushbackInputStream类是FilterInputStream的子类,它提供了推回操作的功能。当使用PushbackInputStream读取数据时,它可以将最后读取的字节推回到流中,这样下一次读取时可以重新读取该字节。

以下是PushbackInputStream类中常用的构造方法和方法:

// 构造方法
public PushbackInputStream(InputStream in)
public PushbackInputStream(InputStream in, int size)

// 常用方法
public void unread(int b)
public void unread(byte[] b)
public void unread(byte[] b, int off, int len)
public int available()
public void close()
available()方法

available()方法是PushbackInputStream类中的方法之一,它用于返回流中当前可用的字节数。如果在已经读取的字节中存在未被推回的字节,则这些字节也会计入可用的字节中。

以下是available()方法的方法签名:

public int available() throws IOException

返回值为int类型,表示当前可用的字节数。如果已经到达流的末尾,则返回0。

示例

以下示例演示了如何使用PushbackInputStream类及其available()方法将最后读取的字节推回到流中,并计算当前可用的字节数:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PushbackInputStream;

public class PushbackInputStreamDemo {
    public static void main(String[] args) throws IOException {
        byte[] bytes = "Hello, world!".getBytes();
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        PushbackInputStream pin = new PushbackInputStream(in);

        int b1 = pin.read();
        int b2 = pin.read();
        System.out.println("b1: " + (char)b1 + ", b2: " + (char)b2); // b1: H, b2: e

        pin.unread(b2);
        int available = pin.available();
        System.out.println("available: " + available); // available: 12
    }
}

该示例首先创建一个byte数组,并使用ByteArrayInputStream将其转换为输入流。然后,将输入流传递给PushbackInputStream类,创建一个带有推回操作的输入流。

接下来,程序依次读取了两个字节,并将它们打印到控制台上。然后,使用unread()方法将第二个字节(即'e')推回到了流中,并使用available()方法计算了当前可用的字节数。最后,将计算结果打印到控制台上。

运行该示例后,将输出以下内容:

b1: H, b2: e
available: 12

可以看到,使用PushbackInputStream类及其available()方法可以方便地将最后读取的字节推回到流中,并计算当前可用的字节数。