首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PushBackInputStream和DataInputStream,如何推回替身?

PushBackInputStream和DataInputStream是Java中的两个输入流类。它们都是FilterInputStream的子类,用于在读取数据时提供额外的功能。

  1. PushBackInputStream(推回输入流):
    • 概念:PushBackInputStream允许将数据推回到输入流中,以便重新读取。它维护一个内部缓冲区,可以将数据推回到缓冲区中,然后再次读取。
    • 分类:PushBackInputStream属于字节输入流。
    • 优势:可以在读取数据时灵活地进行回退操作,避免了频繁地打开和关闭输入流。
    • 应用场景:常用于解析复杂的数据格式,如编译器、解析器等。
    • 腾讯云相关产品:腾讯云没有直接对应的产品与PushBackInputStream相关。
  • DataInputStream(数据输入流):
    • 概念:DataInputStream允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。
    • 分类:DataInputStream属于字节输入流。
    • 优势:可以方便地读取不同类型的数据,如整数、浮点数、字符等,并且保证了数据的正确性和一致性。
    • 应用场景:常用于读取二进制数据文件、网络传输中的数据等。
    • 腾讯云相关产品:腾讯云没有直接对应的产品与DataInputStream相关。

推回替身的具体操作如下:

  1. 创建一个PushBackInputStream对象,并将原始输入流(如FileInputStream)作为参数传入构造函数。
  2. 通过PushBackInputStream对象的unread()方法,将要推回的数据写入内部缓冲区。
  3. 然后可以通过PushBackInputStream对象的read()方法重新读取数据,此时会先从缓冲区读取数据,如果缓冲区为空,则会从原始输入流中读取数据。

示例代码如下:

代码语言:txt
复制
try {
    FileInputStream fis = new FileInputStream("data.txt");
    PushBackInputStream pbis = new PushBackInputStream(fis);
    
    // 读取数据
    int data = pbis.read();
    
    // 推回数据
    pbis.unread(data);
    
    // 重新读取数据
    int newData = pbis.read();
    
    // 处理数据
    // ...
    
    pbis.close();
} catch (IOException e) {
    e.printStackTrace();
}

注意:以上代码仅为示例,实际应用中需要根据具体情况进行适当的异常处理和资源释放。

参考链接:

  • PushBackInputStream文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/PushbackInputStream.html
  • DataInputStream文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/DataInputStream.html
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java IO层次体系结构

在整个Java.io包中最重要的就是5个类和一个接口。...Java I/O主要包括如下几个层次,包含三个部分: 1.流式部分――IO的主体部分; 2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor...等类; 3.其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和...抽象基类 FilterInputStream FilterOutputStream FilterReader FilterWriter 打印流 PrintStream PrintWriter 推回输入流...PushbackInputStream PushbackReader 特殊流 DataInputStream DataOutputStream 注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联

56120

import java.io 是什么意思_Java IO 详解

下面是一个例子:(DataInputStream的好处在于在从文件读出数据时,不用费心地自行判断读入字符串时或读入int类型时何时将停止,使用对应的readUTF()和readInt()方法就可以正确地读入完整的类型数据...下面的代码简单示范了如何实现这个需求。...(); //读出int数据 int score =dataInputStream.readInt(); members[i] = newMember(name,score); } //关闭流 dataInputStream.close...,遍历到某个字符的时候可以进行的操作,当然,如果要插入,能够插入的最大字节数是与推回缓冲区的大小相关的,插入字符肯定不能大于缓冲区吧!...* 分析过程由一个表和许多可以设置为各种状态的标志控制。 * 该流的标记生成器可以识别标识符、数字、引用的字符串和各种注释样式。

79320
  • Java IO详解

    下面是一个例子:(DataInputStream的好处在于在从文件读出数据时,不用费心地自行判断读入字符串时或读入int类型时何时将停止,使用对应的readUTF()和readInt()方法就可以正确地读入完整的类型数据...下面的代码简单示范了如何实现这个需求。 package com.hxw; import java.io.*; /**  * Java学习交流QQ群:589809992 我们一起学Java!  ...,遍历到某个字符的时候可以进行的操作,当然,如果要插入,能够插入的最大字节数是与推回缓冲区的大小相关的,插入字符肯定不能大于缓冲区吧!...使用BufferedWriter 和BufferedReader用文件级联的方式进行写入,即将多个文件写入到同一文件中(自带缓冲区的输出输出流BufferedReader和BufferedWriter,...* 分析过程由一个表和许多可以设置为各种状态的标志控制。   * 该流的标记生成器可以识别标识符、数字、引用的字符串和各种注释样式。

    1.7K00

    务实java基础之IO

    其中最大的挑战似乎是如何覆盖所有可能的因素。...FilterInputStream 给其它被装饰对象提供额外功能的抽象类 主要子类见下表 装饰、输入字节流: 类 功能 如何构造 怎样使用 DataInputStream 一般和DataOutputStream...ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。下表列出了输出字节流的功能及如何使用它们。...见下表 见下表 装饰输出字节流: 类 功能 如何构造 怎样使用 DataOutputStream 通常和DataInputStream配合使用,使用它可以写入基本数据类新。...,遍历到某个字符的时候可以进行的操作,当然,如果要插入,能够插入的最大字节数是与推回缓冲区的大小相关的,插入字符肯定不能大于缓冲区吧!

    25820

    Java IO学习笔记+代码(3)

    * java.io包中用于字符流处理的最基本的类是InputStreamReader和OutputStreamWriter,  * 用来在字节流和字符流之间作为中介。  ...,分别实现了几物特殊的过滤输入流和输出流,利用这些特殊输  * 入流和输出流的实例可以进行流处理。  ...*  * 下面介绍几个过滤输入流和输出流的子类:  *  * BufferedInputStream 和 BufferedOutputStream  * 这两个类实现了带缓冲的过滤流,将任意的输入流和输出流绑定到缓...*  * DataInputStream 和 DataOutputStream  * 这两个类不仅能读写数据流,而且能读写各种各样的Java语言本身固  * 有的数据类型,如int、float等。  ...*  * PushbackInputStream  * PushbackInputStream类提供了方法将刚读过的字节退回到输入流中,  * 后面的内容就可以用到该字节。

    60010

    【Java筑基】IO流基础之常见工具流和进程通信

    后端 ☕专栏简介:深入、全面、系统的介绍java的基础知识 文章简介:本文将深入全面介绍IO流知识,建议收藏备用,创作不易,敬请三连哦 大厂真题:大厂面试真题大全 文章目录 1.转换流 2.推回输入流...line); } } catch (IOException e) { e.printStackTrace(); } } } 2.推回输入流...PushbackInputStream和PushbackReader是推回输入流,它们有一片推回缓冲区域,在读取数据时,会优先从推回缓冲区域读取,只有推回缓冲区域的内容没有装满read()所需数组的大小时才会去流中读取...public class PushbackTest { public static void main(String[] args) { // 指定推回缓冲区长度为64....面经汇总|超全笔试题库 3.超多面经,大厂面经很多 4.内推机会,大厂招聘特别多 链接: 找工作神器|大厂java面经汇总|超全笔试题库 5.大厂真题,直接拿到大厂真实题库,而且和许多大厂都有直接合作

    26730

    夯实Java基础系列16:一文读懂Java IO流和常见面试题

    某些类似PushbackInputStream 流的实现允许你将数据重新推回到流中,以便重新读取。然而你只能把有限的数据推回流中,并且你不能像操作数组那样随意读取数据。流中的数据只能够顺序访问。...除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...Java IO管道示例 这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子: //使用管道来完成两个线程间的数据点对点传递 @Test...DataInputStream 和 DataOutStream有的方法,在RandomAccessFile中都存在。

    53510

    夯实Java基础系列16:一文读懂Java IO流和常见面试题

    某些类似PushbackInputStream 流的实现允许你将数据重新推回到流中,以便重新读取。然而你只能把有限的数据推回流中,并且你不能像操作数组那样随意读取数据。流中的数据只能够顺序访问。...除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...Java IO管道示例 这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子: //使用管道来完成两个线程间的数据点对点传递 @Test...DataInputStream 和 DataOutStream有的方法,在RandomAccessFile中都存在。

    1.4K21

    JavaIO之类层次体系结构横向比对

    IO家族类层次体系结构横向匹配 上一篇文章中主要介绍了JavaIO流家族的整体设计思路,简单回顾下 基本逻辑涉及数据源 流的方向,以及流的数据形式这三个部分的组合 按照流的数据形式和流的方向,组合而来了四大家族...CharArrayReader CharArrayWriter 扩展功能基本通过装饰器模式实现 扩展功能点 InputStream OutputStream Reader Writer Data(基本类型) DataInputStream...BufferedReader BufferedWriter LineNumber(行号) LineNumberInputStream 无 LineNumberReader 无 Pushback(回退) PushbackInputStream...File才是真正跟磁盘文件相关的 其他的数据源形式都是操作内存数据 IO扩展功能应用 Data(基本类型) Data是对基本数据类型的支持针对于DataOutputStream写出的数据文件可以使用DataInputStream...流都是顺序读取不能回退的,所以想要读取行号自然要借助于缓存他的实现继承BufferedReader 也很好理解 Pushback Pushback 回退,也就是读取了一个字符,然后再次把它放回到流中所以是针对输入的PushbackInputStream

    61430

    【Java基本功】浅析Java中IO流的概念和用法

    某些类似PushbackInputStream 流的实现允许你将数据重新推回到流中,以便重新读取。然而你只能把有限的数据推回流中,并且你不能像操作数组那样随意读取数据。流中的数据只能够顺序访问。...除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...整合Writer和OutputStream 与Reader和InputStream类似,一个Writer可以和一个OutputStream相结合。...Java IO管道示例 这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子: //使用管道来完成两个线程间的数据点对点传递 @Test

    46620

    Java基础17:Java IO流总结

    某些类似PushbackInputStream 流的实现允许你将数据重新推回到流中,以便重新读取。然而你只能把有限的数据推回流中,并且你不能像操作数组那样随意读取数据。流中的数据只能够顺序访问。...除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...整合Writer和OutputStream 与Reader和InputStream类似,一个Writer可以和一个OutputStream相结合。...Java IO管道示例 这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子: //使用管道来完成两个线程间的数据点对点传递 @Test

    1K00

    设计模式 | 装饰者模式及典型应用

    在装饰者模式中,为了让系统具有更好的灵活性和可扩展性,我们通常会定义一个抽象装饰类,而将具体的装饰类作为它的子类 角色 Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法...由于具体构件类和装饰类都实现了相同的抽象构件接口,因此装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。...装饰者模式类图 小结一下 由于具体构件类和装饰类都实现了相同的抽象构件接口,因此装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。...PushBackInputStream 推回输入流,可以把读取进来的某些数据重新回退到输入流的缓冲区之中 BufferedInputStream 缓冲流,增加了缓冲功能 下面看一下Java中包装流的实例...: import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputStream;

    38030
    领券