我有一个InputStream
,需要在开头和结尾添加字符,并最终得到另一个InputStream
类型的变量。我该如何轻松地完成这个操作?
我有一个InputStream
,需要在开头和结尾添加字符,并最终得到另一个InputStream
类型的变量。我该如何轻松地完成这个操作?
您需要一个SequenceInputStream和几个ByteArrayInputStream。您可以使用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));
如果你有许多字符要添加,又不想将它们一次性转换为字节,那么你可以将它们放在StringReader中,然后使用Commons IO中的ReaderInputStream将它们作为字节读取。但是你需要将Commons IO添加到你的项目中才能这样做。具体的代码留给读者练习。
1 创建一个新的OutputStream
,使用Greg建议的字节数组作为支持。
2 将起始字符写入您的新的OutputStream
。
3 将现有的InputStream
复制到您的新的OutputStream
。
4 将结束字符写入您的新的OutputStream
。
5 关闭您的新的OutputStream
,注意保留支持数组。
6 将支持数组作为一个新的InputStream
打开。
如果您在执行这些步骤中遇到问题,请告诉我们。
Arrays.asList
而不是Collections.asList
。 - pqn