系统学习 Java IO (十)----回退流 PushbackInputStream

目录:系统学习 Java IO---- 目录,概览html

PushbackInputStream 旨在从 InputStream 解析数据时使用。 有时您须要先读取几个字节以查看将要发生的事情,而后才能肯定如何解释当前字节, PushbackInputStream 容许这样作。 实际上,它容许将读取的字节推回到流中,这样就像流没有被动过,下次调用 read() 时,将再次从新读取。通俗来说,就像男人对女人(Stream)说:我只看看,不动手。java

构造器
  1. PushbackInputStream(InputStream in):经过输入流 in 建立 PushbackInputStream 。数组

  2. PushbackInputStream(InputStream in, int size):使用指定 size 建立 , size 表明推回缓冲区的大小。函数

这是一个简单的PushbackInputStream示例:学习

PushbackInputStream input = new PushbackInputStream(new FileInputStream("c:\\data\\input.txt"));
int data = input.read();
input.unread(data);

对 read() 的调用就像从 InputStream 中读取一个字节。 对 unread() 的调用将一个字节推回到PushbackInputStream 中。 下次调用 read() 时,将首先读取推回的字节。 若是将多个字节被推回,则推回的最新字节将首先从 read() 返回,就像在堆栈上同样。code

字段摘要

流自己不支持回退功能, PushBackInputStream 内部维护了一个 byte 数组来实现推回操做的。
protected byte[] buf 推回缓冲区。
protected int pos 推回缓冲区中的位置,将读取该位置的下一个字节。htm

设置 PushbackInputStream 的后推限制

能够在 PushbackInputStream 的构造函数中设置应该可以读取的字节数。 如下是如何经过 PushbackInputStream 构造函数设置回退限制:blog

int pushbackLimit = 8;
PushbackInputStream input = new PushbackInputStream(
                                new FileInputStream("c:\\data\\input.txt"),
                                pushbackLimit);

此示例设置 8 字节的内部缓冲区。 这意味着您能够一次读取最多 8 个字节,而后推回去。get

方法摘要
方法 说明
int read(byte[] b, int off, int len) 今后输入流将最多 len 个数据字节读入 byte 数组。
void unread(byte[] b) 推回一个 byte 数组:将其复制到推回缓冲区以前。
void unread(int b) 推回一个字节:将其复制到推回缓冲区以前。
void mark(int readlimit) 标记当前位置。和 ByteInputStream 同样,此类的 mark() 方法不执行任何操做。
void reset() 此类的 reset() 方法不执行任何操做,只抛出 IOException。调用就异常。
相关文章
相关标签/搜索