【问题标题】:Adding characters to beginning and end of InputStream in Java在 Java 中将字符添加到 InputStream 的开头和结尾
【发布时间】:2011-10-29 06:45:31
【问题描述】:

我有一个InputStream,我需要在其开头和结尾添加字符,并且应该以另一个InputStream 类型的变量结尾。我怎么能轻易做到这一点?

【问题讨论】:

    标签: java inputstream bufferedinputstream


    【解决方案1】:

    你想要一个SequenceInputStream 和几个ByteArrayInputStreams。您可以使用 String.getBytes 为后者制作字节。 SequenceInputStream 很古老,所以使用起来有点笨拙:

    InputStream middle ;
    String beginning = "Once upon a time ...\n";
    String end = "\n... and they lived happily ever after.";
    List<InputStream> streams = Arrays.asList(
        new ByteArrayInputStream(beginning.getBytes()),
        middle,
        new ByteArrayInputStream(end.getBytes()));
    InputStream story = new SequenceInputStream(Collections.enumeration(streams));
    

    如果您有很多字符要添加,并且不想将它们转换为字节en masse,您可以将它们放入StringReader,然后使用ReaderInputStream from Commons IO 将它们读取为字节。但是您需要将 Commons IO 添加到您的项目中才能做到这一点。具体代码留给读者练习。

    【讨论】:

    • 请详细点?感谢方便的类名。
    • 如果您阅读了这些类的 javadoc,就很明显了。构造一个包含开头字节的第一个 ByteArrayInputStream(我们称之为 head),第二个包含结束字节(我们称之为 tail),并从头部、原始输入流和尾部构建一个 SequenceInputStream。
    • 另外,它应该是Arrays.asList 而不是Collections.asList
    【解决方案2】:

    1 创建一个新的OutputStream,由 Greg 建议的字节数组支持..
    2 将开头字符写入新的OutputStream
    3 将现有的InputStream 复制到新的OutputStream
    4 将结尾字符写入新的OutputStream
    5 关闭新的OutputStream,注意保留支持数组。
    6 以新的InputStream 形式打开后备阵列。

    如果您对这些步骤有任何疑问,请告诉我们。

    【讨论】:

    • 如何将字符写入 InputStream?
    • -1,将结束字符写入新的 InputStream。 -> 你不能向 InputStream 写入字符
    • 哎呀!重启大脑。正如 Greg 所说,写入由字节数组支持的输出流。提取支持数组并作为输入流重新打开。谢谢指正。
    • -1,这可以用代码更好地表示,但对于大型流来说效率不高。
    • @Fabian 我把这个问题当作家庭作业,因此我提供了帮助,但没有提供代码。 YMMV。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多