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

对于重复使用InputStream,PushbackInputStream是一种替代方案吗?

对于重复使用InputStream,PushbackInputStream是一种替代方案。

PushbackInputStream是Java IO库中的一个类,它可以在读取数据时将部分数据推回到输入流中,以便后续读取。它继承自FilterInputStream类,因此可以包装任何其他InputStream,并提供额外的功能。

在某些情况下,当我们需要多次读取InputStream中的数据时,使用PushbackInputStream可以提供更灵活的操作。通过将数据推回到流中,我们可以重新读取之前读取过的数据,而无需重新打开和读取整个InputStream。

然而,PushbackInputStream并不是对所有重复使用InputStream的最佳替代方案。它适用于需要在读取过程中进行一些额外操作的特定场景,例如在解析器中回退解析的部分数据。对于一般的重复使用InputStream的情况,更常见的做法是使用mark()和reset()方法。

mark()方法可以在InputStream中标记当前位置,而reset()方法可以将流的位置重置到最后一次标记的位置。这样,我们可以通过重复调用reset()方法来重复读取InputStream中的数据,而无需使用PushbackInputStream。

综上所述,PushbackInputStream是一种替代方案,但并不适用于所有情况。在实际应用中,我们需要根据具体需求和场景选择合适的方法来重复使用InputStream。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

08.装饰者模式设计思想

装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰者模式动态地将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。...4.4 InputStream装饰者模式InputStream类型中的装饰者模式是半透明的。为了说明这一点,不妨看一看作装饰者模式的抽象构件角色的InputStream的源代码。...{} public PushbackInputStream(InputStream in, int size) {} public PushbackInputStream(InputStream...如果客户端持有一个类型为InputStream对象的引用in的话,那么如果in的真实类型是 PushbackInputStream的话,只要客户端不需要使用unread()方法,那么客户端一般没有问题。...装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰者模式适用于以下场景:更多内容动态地给一个对象添加额外的功能,而不需要修改其原始类的代码。

6510

传感器替代电源解决方案:下一个是印刷电源吗?

在可供选择的传感器电源解决法案中,印刷太阳能电池作为一种灵活、廉价和质量日益提高的选择脱颖而出。 物联网(IoT)中的传感器数量将从数十亿增加到数万亿。...由于大多数电池都是无线连接的,而电池最为一种能源解决方案的容量有限,人们的目光转向了其它能源收集解决方案。...基于硅的系统是实施最多的技术,由于它的成熟、可承受性、稳定性和安全性。中国的廉价制造业使其广泛应用于电力生产。...硅电池仍然不能满足物联网系统的需求;电池很重,需要特定角度的强光照才能正常工作,而且它们是黑色的,不灵活。...一种技术不太可能解决所有情况。在新建筑中,将传感器集成到有线电网中通常是有意义的,但这对改造现有建筑来说不是可行的选择。 在可预见的未来,只要硅太阳能电池能发挥作用,它们就可能成为首选。

15420
  • JavaIO之PushBackInputStream

    功能简介 PushBackInputStream是针对于输入的一种扩展功能 装饰器模式中的具体的装饰类,抽象的装饰器为FilterInputStream PushBackInputStream的重点在于理解缓冲区的使用手段...流本身不支持回退功能,想要能够pushBack 显然必须能够缓存数据PushBackInputStream内部维护了一个字节数组 不要想当然的认为,类似BufferedInputStream,内部缓冲了一个数组...,所有的数据都要经过这个缓冲区,然后对他做处理 他内部维护的缓冲区,仅仅保存pushBack的字节 还需要注意的是他的内部缓冲区是从后往前写入的,也就是下图中的,从右往左下标索引大的先写入一旦写满...buf.length也就是说,读取一个字节时,如果回退缓冲内有数据,直接返回一个字节否则,调用父类的read方法,而父类FilterInputStream 只是简单的 封装转发请求实际上就是直接使用内部的InputStream...否则,就再去使用实际的流去进行读取 看得出来,如果你从来不曾回退过,那么好像什么都一样,还是使用原来的InputStream 进行读取

    85720

    Java标准IO流编程一览笔录

    I/O 是Input/Output(输入、输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出。 2、流 流是一个连续的数据流,可以从流中读取数据,也可以往流中写数据。...PushbackInputStream类具有以下构造函数: PushbackInputStream(InputStream inputStream) PushbackInputStream(InputStream...inputStream,int numBytes) 第一种形式创建的流对象允许将一个字节返回到输入流; 第二种形式创建的流对象具有一个长度为numBytes的回推缓存,从而允许将多个字节回推到输入流中...= null) pis.close(); } } 注:PushbackInputStream对象会使得InputStream对象(用于创建PushbackInputStream对象)的mark...对于准备使用mark()或reset()方法的任何流来说,都应当使用markSupported()方法进行检查。

    2.1K140

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

    如果你正在开发一个从流中读取数据的组件,请尝试用InputStream替代任何它的子类(比如FileInputStream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...IO文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介。所以这一小节将会对Java中文件的使用做一个简短的概述。...InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类。...JavaIO流面试题 什么是IO流? 它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。

    53510

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

    此处我想要提醒的是, 对于我们程序设计语言来说,IO 表示的是对数据的操纵,数据有读写 IO代表的是一类可读可写行为类似的事物,而不是指从磁盘上读取文件 为什么不是有一个单纯的类去进行对于字节数组的操作呢...File(文件) 前面说过,File 是最常见的一种数据形式所以对IO提供针对文件的操作非常合理我们知道,所有的数据存储最终都是字节的形式但是对于文件的操作又是如此的频繁和重要所以,针对于字符的输入输出也提供了对应的处理不过还是那句话...类File类的构造主要由路径名或者文件描述符所以对于文件的输入输出相关的IO操作,自然可以通过  路径名  文件描述符  或者File 本身作为目标对象也就是说构造函数的参数一般都是这三者之一 对于文件的操作是实实在在的操作文件本身...Pushback 回退,也就是读取了一个字符,然后再次把它放回到流中所以是针对输入的PushbackInputStream  PushbackReader 也是借助于内部的缓存 Print(打印)...主要是为了提供数据打印的便利性 打印自然是针对于输出的 PrintStream  PrintWriter 本文从数据源以及扩展功能点的角度,再次分析了IO类库的整体设计 虽然上一篇文章中对于所有的基本功能点以及扩展功能点已经做了一个介绍

    61430

    设计模式—— 十七:装饰器模式

    使用继承机制是添加功能的一种有效途径,但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。 下面是一个具体的业务场景实例。...● 装饰模式是继承关系的一个替代方案。我们看装饰类Decorator,不管装饰多少层,返 回的对象还是Component,实现的还是is-a的关系。...● 装饰模式提供了一种比继承更加灵活机动的解决方案,但同时也意味着比继承更加易于出 错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为繁琐。...● 需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。 扩展-Java中的装饰器模式 在Java中比较典型的应用就是I/O流。 以下是Java I/O流InputStream的部分类图: ?...它实现了InputStream所规定的接口。

    1K10

    Java描述设计模式(09):装饰模式

    一、生活场景 1、场景描述 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领。他变成鱼儿时,就可以到水里游泳;他变成鸟儿时,就可以在天上飞行。...装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。...很少单一的创建流对象,通过创建多个叠合对象来提供所期望的IO流功能,因此装饰模式是Java I/O类库的基本模式。 2)、IO流图解描述 抽象构件角色 由InputStream扮演。...它实现了InputStream所规定的接口。...具体装饰角色 由几个类扮演,分别是BufferedInputStream、DataInputStream以及两个不常用到的类LineNumberInputStream、PushbackInputStream

    40110

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

    如果你正在开发一个从流中读取数据的组件,请尝试用InputStream替代任何它的子类(比如FileInputStream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...IO文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介。所以这一小节将会对Java中文件的使用做一个简短的概述。...InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类。...JavaIO流面试题 什么是IO流? 它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。

    1.4K21

    Android实现TCP断点上传,后台C#服务实现接收

    所以得采用另一种流行的做法,TCP上传大文件。...网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Post方法,将文件直接传至后端...在网络好的情况下没什么问题,但网络差点后来经常上传一半掉线或多个客户端上传出现连不上的情况,对于大文件极不稳定,所以赶紧研发TCP协议文件断点上传。...npos = Convert.ToInt64(Request.Params["npos"]); int upLoadLength = Convert.ToInt32(Request.InputStream.Length...SeekOrigin.Begin); //从客户端的请求中获取文件流 BinaryReader bReader = new BinaryReader(Request.InputStream

    1.1K90

    Java基础17:Java IO流总结

    InputStream java.io.InputStream类是所有Java IO输入流的基类。...如果你正在开发一个从流中读取数据的组件,请尝试用InputStream替代任何它的子类(比如FileInputStream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...IO文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介。所以这一小节将会对Java中文件的使用做一个简短的概述。...InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类。

    1K00

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

    InputStream java.io.InputStream类是所有Java IO输入流的基类。...如果你正在开发一个从流中读取数据的组件,请尝试用InputStream替代任何它的子类(比如FileInputStream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。...你可以把InputStream包装到PushbackInputStream中,之后可以将读取过的数据推回到流中重新读取,在解析过程中有时候这样做很方便。...IO文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介。所以这一小节将会对Java中文件的使用做一个简短的概述。...InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类。

    46620

    务实java基础之IO

    “对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的。其中最大的挑战似乎是如何覆盖所有可能的因素。...(6) 其他起源地,如 Internet 连接等 除此以外, FilterInputStream 也属于 InputStream 的一种类型,用它可将属性或者有用的接口同输入流连接到一起。...利用一个InputStream构造。 紧紧增加一个行号。可以象使用其它InputStream一样使用。 PushbackInputStream 可以在读取最后一个byte 后将其放回到缓存中。...PushbackInputStream类继承了FilterInputStream类是iputStream类的修饰者。...然而,我们注意到在以相同字母开头的一组文件名中,大写字母是排在前面的—— 这对标准的排序来说仍是一种不合格的行为。 Java 1.2 已成功解决了这个问题。

    25820

    Java IO层次体系结构

    大家好,又见面了,我是你们的朋友全栈君。 在整个Java.io包中最重要的就是5个类和一个接口。...5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了...InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。 3. OutputStream(二进制格式操作):抽象类。...是所有输出流的父类。定义了所有输出流都具有的共同特征。 Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。...FilterInputStream FilterOutputStream FilterReader FilterWriter 打印流 PrintStream PrintWriter 推回输入流 PushbackInputStream

    55820

    OpenJDK 阅读源代码 Java 实现字节流输入类

    大家好,又见面了,我是全栈君 Java 的输入输出总是给人一种非常混乱的感觉。要想把这个问题搞清楚。必须对各种与输入输出相关的类之间的关系有所了解。 仅仅有你了解了他们之间的关系。...字节流输入 图1 Java 字节输入类 InputStream InputStream 是全部字节输入类的基类,它有一个未实现的 read 方法。...所以,它的初始化中,会指定一个字节输入流: protected volatile InputStream in; protected FilterInputStream(InputStream...: public final float readFloat() throws IOException { return Float.intBitsToFloat(readInt()); } PushbackInputstream...PushbackInputstream 类也是FilterInputStream的子类,它提供的功能是。

    58920

    Java IO库如何体现装饰模式

    适配器模式:在由InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器是对其他类型的流处理器的适配。这就是适配器的应用。 为什么不采用继承?...java I/O库需要很多性能的各种组合,如果这些性能都是用继承来实现,那么每一种组合都需要一个类,这样就会造成大量行重复的类出现。...因此装饰模式是java I/O库基本模式。...以这个类为核心说明装饰模式的各个角色是由哪些流处理器扮演: 抽象构件(Component)角色:由InputStream扮演。这是一个抽象类,为各种子类型处理器提供统一的接口。...Concrete Decorator)角色:由几个类扮演,分别是DateInputStream、BufferedInputStream 以及两个不常用到的类LineNumberInputStream和PushbackInputStream

    47920

    RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】

    ()方法时,返回一个输入流,用于从中读取服务器对于HTTP请求的返回信息。...都是Square公司自家的,Square公司还出了一个Retrofit库配合OkHttp战斗力翻倍)~~~ 池化技术一般用于长连接,那么像Http这种适合连接池吗?...转换为字节数组 Charset charset = getCharset(response); // 注意这里的编码,是从返回的contentType里拿的~~~ // 分别针对于客户端错误...{ private final ClientHttpResponse response; // java.io.PushbackInputStream @Nullable private PushbackInputStream...pushbackInputStream; // 判断相应里是否有body体 // 若响应码是1xx 或者是204;或者getHeaders().getContentLength() == 0

    4.6K70
    领券