java - SequenceInputStream 构造函数仅选择第一个输入流并忽略其余部分

标签 java inputstream java-io filemerge

我正在使用 SequenceInputStream 将多个流合并为一个流。我用的是JDK8。以下是代码。

private InputStream mergeInputStreams(final Map<String, InputStream> fileAssets, final JSONObject json) throws Exception {

    final List<InputStream> listStreams = new ArrayList<InputStream>();

    listStreams.add(stringToStream(HEADER));
    addToList(json, listStreams);

    listStreams.add(stringToStream(HEADER_2));
    addToList(fileAssets.get(FILE_2), listStreams, true);

    listStreams.add(stringToStream(HEADER_3));
    addToList(fileAssets.get(FILE_3), listStreams, false);

    return new SequenceInputStream(Collections.enumeration(listStreams));
}

private void addToList(final InputStream inputStream, List<InputStream> listStreams, final boolean delimiter) throws Exception {
    final byte[] input = byteArrayFromStream(inputStream);
    listStreams.add(intToStream(input.length));
    listStreams.add(new ByteArrayInputStream(input));
    if (delimiter) {
        listStreams.add(stringToStream("\n"));
    }
}

private void addToList(final JSONObject json, final List<InputStream> listStreams) throws Exception {
    final String jsonString = json.toString();
    listStreams.add(intToStream(jsonString.length()));
    listStreams.add(stringToStream(jsonString));
}

我遇到的问题是,我总是从 SequenceInputStream 对象获取第一个流,即我只获取 HEADER 字符串。我尝试了多种选择,包括

new SequenceInputStream(listStreams.get(9), listStreams.get(9)); 

在上面的示例中,我尝试合并相同的输入两次。但是,我仍然只获得第 9 个输入流一次。

我已经验证我确实在枚举中获得了多个流。

如果有人能帮助我了解这里发生的事情,那就太好了。

最佳答案

它将读取第一个流,直到流结束,然后读取第二个流,依此类推。也许这不是你所期待的?这也意味着您不能两次提供相同的流,因为它在第一次使用时已经被完全读取。

我不明白构造函数与它有什么关系。

关于java - SequenceInputStream 构造函数仅选择第一个输入流并忽略其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913219/

相关文章:

java - 使用 dom 解析器 api 在 Java 中覆盖现有 XML 文档

java - 获取请求handshake_failure :javax.net.ssl.SSLHandshakeException

java - 达到指定文件大小后停止 HtmlUnit 下载

Java:InputStreamReader字符编码需要运行两次

Java-Randomized Queue Iterator导致Invalid Range异常

java - 密码学 - Java 1.4 中的 RSA 算法

java - 该输入流是否已关闭?

java - 被诅咒的 java.lang.NullPointerException

java.io.File.<init>(File,String) JDK 版本依赖