有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java读取输入流的一部分两次

我有一个ServletInputStream,它可能非常大,我想提取InputStream的前X字节,然后让流处于初始状态

我现在做的是markSupported()、mark()和reset(),但是markSupported返回false,所以我需要实现另一种方法

描述了一种解决方案here来读取两次输入流,但问题是我的流可能非常大,并且我不能将所有的数据都存储在内存中(此外,我不确定最大数组大小是否足够)

有没有办法只读取少量字节,然后将流置于初始状态。解决方法是使用我想要读取的X字节,然后除了下面的过程(我想要避免)之外,让使用的流传递X字节


共 (1) 个答案

  1. # 1 楼答案

    你看过java.io.PushbackInputStream

    如果我理解正确,那么它似乎非常适合您想要实现的目标,尤其是如果您想要检查的字节位于流的开头

    byte[] peekBuffer = new byte[n];
    PushbackInputStream pis = new PushbackInputStream(yourStream, peekBuffer.length);
    
    pis.read(peekBuffer);
    // Examine peekBuffer
    
    // Reinsert the peeked bytes.
    pis.unread(peekBuffer);