我正在使用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个输入流一次。
我已经确认我在枚举中获得了多个流。
如果有人能帮我理解这里发生的事情,那就太好了。
答案 0 :(得分:1)
它将读取第一个流直到流结束,然后是第二个流,依此类推。可能这不是你所期待的?这也意味着你不能两次提供相同的流,因为在第一次使用时它已经完全被读取了。
我没有看到构造函数与它有什么关系。