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

无论markSupported()如何,都要使InputStream读取多次

在这个问答内容中,我们需要解决的问题是如何在多次读取InputStream的情况下,确保InputStream可以被正确地读取。

首先,我们需要了解InputStream的工作原理。InputStream是Java中的一个抽象类,它是一个字节流,可以用于读取数据。InputStream可以从文件、网络、内存等来源读取数据。

在多次读取InputStream的情况下,我们需要注意以下几点:

  1. 如果InputStream是从文件或其他可重复读取的来源创建的,那么可以在多次读取InputStream的情况下,通过调用reset()方法来重置InputStream的位置,从头开始读取。
  2. 如果InputStream是从网络或其他不可重复读取的来源创建的,那么在多次读取InputStream的情况下,需要将InputStream中的数据缓存到内存中,以便在多次读取时可以从内存中读取。
  3. 如果InputStream是从内存中创建的,那么在多次读取InputStream的情况下,需要将InputStream中的数据复制到另一个InputStream中,以便在多次读取时可以从另一个InputStream中读取。
  4. 如果InputStream是从文件或其他可重复读取的来源创建的,那么可以使用mark()和reset()方法来标记和重置InputStream的位置,从头开始读取。
  5. 如果InputStream是从网络或其他不可重复读取的来源创建的,那么在多次读取InputStream的情况下,需要将InputStream中的数据缓存到内存中,以便在多次读取时可以从内存中读取。

总之,在多次读取InputStream的情况下,需要根据InputStream的来源来选择合适的方法来确保InputStream可以被正确地读取。

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

相关·内容

JavaIO之InputStream OutputStream简介 方法列表说明

InputStream  包含了读取方法以及辅助方法 OutputStream包含了写入方法以及辅助方法 方法对照 read() read(byte[]) read(byte[], int, int...) write(byte[]) write(byte[], int, int) write(int) close close flush() available() mark(int) markSupported...,以及指定字节数组的偏移量时的一些拓展功能一旦传递了字节数组作为参数read将会读取数据到字节数组write将会将字节数组的数据写入 close 需要关闭流,所以都有close方法都是关闭流并释放与此流有关的系统资源都可能抛出...注意:这个数目是一个预估的数量实际的读取或者跳过的字节数可能小于这个数 InputStream中的这个方法总是返回0  所以这个方法能否使用依赖于子类的实现 public long skip(long...xxxStream.read(); 如果方法 markSupported 返回 true,那么输入流总是在调用 mark 之后记录所有读取的字节并时刻准备在调用方法 reset 时(无论何时),再次提供这些相同的字节但是

60320
  • InputStream和OutputStream的思考

    在java中分别有InputStream和OutputStream对应从硬件读取数据,向硬件写数据。为了和操作系统的数据保持一致,IO操作的都是字节,在x86和x64处理器中,一个字节一般都是8位。...这时候我们需要先调用markSupported()方法判断当前数据流是否支持标记,在这个场景中,当然是需要支持的了。...那有必要让实现类实现这些方法吗?...还有工程师提供了带读写限制的FilterInputStream的读实现类,例如我们只希望读取到最多5MB的数据,而InputStream可能提供超过5MB的数据。...识别FilterInputStream和FilterOutputStream 如何识别这两个特殊的类的实现类呢?如果你读懂了上边的两个小节,你就会发现他们是需要你传入一个真实的IO流。

    85810

    Java网络编程的Java流介绍

    虽然此方法接受一个int作为参数,但它实际上会写入一个无符号字节,因为java没有无符号字节数据类型,所以这要使用int来代替。无符号字节和有符号字节之间唯一的真正区别在于解释。...Java中的流相关的类基本上直接或间接的实现了AutoCloseable接口。...输入流 Java的基本输出流类是:java.io.InputStream; 这个类提供了将数据读取为原始字节所需要的基本方法。...() throws IOException public boolean markSupported() 为了重新读取数据,要用mark()方法标记流的当前位置,在以后某个时刻可以用reset()方法把流重置到之前标记的位置...在尝试使用标记和重置之前,要坚持markSupported()方法是否返回true。

    86040

    JavaIO之BufferedInputStream BufferedOutputStream

    功能简介 BufferedInputStream 和 BufferedOutputStream一样,他们都是过滤流 装饰器模式下具体的装饰类 用来装饰InputStream以及OutputStream下的其他的具体的实现类...markpos / marklimit mark功能使用 构造方法 说了很多遍的装饰器模式, 是你还有你 他的使用,必然离不开 InputStream,而且,它内部还会维护一个 InputStream.../available/mark/reset/markSupportedInputStream的协议语义 跳过指定个数 获取可用个数 做标记 回到标记点 测试是否支持mark 和reset方法...close 虽然并不是直接打开资源,但是它涉及到内部的InputStream,所以需要cloase BufferedOutputStream BufferedOutputStream内部也是通过字节数组进行缓存的...或者OutputStream 另外,既然提供了缓冲的功能,常用的缓冲功能自然是数组的形式 对于他们两个就是字节数组 他们内部就是维护了一个字节数组 BufferedInputStream 会将内部底层的流读取的数据

    93820

    Java开发必备:深度学习InputStreamReader类的使用方法

    boolean ready() throws IOException:检查此流是否准备好读取。boolean markSupported():判断此流是否支持mark和reset方法。...用例代码解析  如上测试代码给同学们演示了如何使用 InputStreamReader 类从文件中读取文本数据。...最后,它使用 BufferedReader 对象读取一行文本,然后关闭所有打开的流,这点一定是需要注意的,经常会被忽视。(该程序假定文本文件是 UTF-8 编码。)不关IO流会当如何?  ...针对该问题,我来给大家普及一下,若只使用IO流而不关闭流,会有如何影响,同学们请看:浪费资源:打开的文件句柄或网络连接等资源不会被释放,会一直占用系统资源,导致系统资源的浪费。...☀️建议/推荐你  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门

    19721

    Java IO 知识整理

    FileInputStream: 继承自InputStream的文件输入流类,用于从本地文件中读取字节数据。...一个流对象经过其他流的多次包装,称为流的链接。 注:输入输出流中的入和出,都是相对于系统内存而言的。为什么要有处理流?直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。...boolean markSupported(): 当前的流是否支持读指针的记录功能。...boolean ready(): 通知此流是否已准备好被读取。 boolean markSupported(): 告诉此流是否支持mark()操作。...依赖倒置原则:Java IO中的各个具体的功能类,继承或聚合了InputStream/OutputStream的抽象类,共同依赖了抽象,而不是依赖了某个具体的功能的IO类。

    53620

    Java 的字节流文件读取(一)

    基类字节流 Input/OutputStream InputStream 和 OutputStream 分别作为读字节流和写字节流的基类,所有字节相关的流必然继承自他们中任意一个,而它们本身作为一个抽象类...InputStream 中还有其他几个方法,基本都没怎么具体实现,留待子类实现,我们简单看看。...关闭流并释放对应的资源 public synchronized void mark(int readlimit) public synchronized void reset() public boolean markSupported...而 markSupported 方法则用于确定当前流是否支持这种「回退式」读取操作。 OutputStream 和 InputStream 是类似的,只不过一个是写一个是读,此处我们不再赘述了。...---- 文章中的所有代码、图片、文件云存储在我的 GitHub 上: (https://github.com/SingleYam/overview_java)

    1.6K70

    Java 字符流文件读写

    基类 Reader/Writer 在正式学习字符流基类之前,我们需要知道 Java 中是如何表示一个字符的。...还有一些方法也是类似的: public long skip(long n):跳过 n 个字符 public boolean ready():下一个字符是否可读 public boolean markSupported...,并且和我们的 InputStream 大体上差不多,都没有什么核心的实现,这里不再赘述,你大致知道它内部有些个什么东西即可。...FileDescriptor fd) { super(new FileInputStream(fd)); } 理论上来说,所有的字符流都应当以我们的适配器为基类,因为只有它提供了字符到字节之间的转换,无论你是写或是读离不开它...关于 read,它依赖成员属性 in 的读方法,而 in 作为一个 Reader 类型,内部往往又依赖的某个 InputStream 实例的读方法。 所以说,几乎所有的字符流离不开某个字节流实例。

    1.2K20

    面试官:字节流可以处理一切文件为什么还需要字符流呢?

    3.1 InputStream(字节输入流)InputStream作为所有字节输入流的父类,主要作用是将外部数据读取到内存中,主要方法如下(JDK8):read():返回输入流中下一个字节的数据。...available():返回输入流中可以读取的字节数。close():关闭输入流释放相关的系统资源。markSupported() :该输入流是否支持mark()和reset()方法。...3.3 Reader(字符输入流)在讲解字符流之前,我们来解释一个面试问题:“为什么有了字节流了还需要使用更耗时的字符流”确实,字节作为信息存储的最小单元,我们可以通过字节流实现所有信息的输入与输出,但有时候会存在一些问题...说了这么多,我们现在来看一下Reader这个字符输入流提供的主要方法吧,其实和InputStream差不多,只不过一个是以字节为单位的读取,一个是以字符为单位。read() : 从输入流读取一个字符。...那么字符流是如何实现txt文件读取的呢?

    9310

    java IO流的概念理解「建议收藏」

    使用处理流的一个明显的好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源,随着处理流所包装的节点流的变化,程序实际所访问的数据源也相应的发生变化。...里面提供了一些方法来控制记录指针的移动。    ...程序如何判断取水取到了最后呢?直到read(char[] chuf)或者read(byte[] b)方法返回-1,即表明到了输入流的结束点。...boolean markSupported(); 判断此输入流是否支持mark()操作,即是否支持记录标记。 void reset(); 将此流的记录指针重新定位到上一次记录标记(mark)的位置。...我们使用InputStream从输入流中读取数据时,如果没有读取到有效的数据,程序将在此处阻塞该线程的执行。其实传统的输入里和输出流都是阻塞式的进行输入和输出。

    48610
    领券