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


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

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

    构造器
    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() 返回,就像在堆栈上一样。

    字段摘要

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

    设置 PushbackInputStream 的后推限制

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

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

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

    方法摘要
    方法 说明
    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。调用就异常。
  • 相关阅读:
    iptables学习笔记
    启动级别和单用户模式
    Apache虚拟主机配置模板
    LAMP环境搭建问题
    LAMP环境搭建
    C++面向对象高级编程(九)Reference与重载operator new和operator delete
    C++面向对象高级编程(八)模板
    C++面向对象高级编程(七)point-like classes和function-like classes
    C++面向对象高级编程(六)转换函数与non-explicit one argument ctor
    C++面向对象高级编程(五)类与类之间的关系
  • 原文地址:https://www.cnblogs.com/czwbig/p/10011880.html
Copyright © 2020-2023  润新知