围绕返回的数组创建多个ByteArrayInputStream
实例,并在提供连接的流中使用它们。例如,您可以为此使用SequenceInputStream
。
诀窍是实现一个Enumeration<ByteArrayInputStream>
可以使用的ByteReader
类。
编辑:我已经实现了这个答案,但最好创建自己的InputStream
实例。不幸的是,这个解决方案不能让你IOException
优雅地处理。
final Enumeration<ByteArrayInputStream> basEnum = new Enumeration<ByteArrayInputStream>() {
ByteArrayInputStream baos;
boolean ended;
@Override
public boolean hasMoreElements() {
if (ended) {
return false;
}
if (baos == null) {
getNextBA();
if (ended) {
return false;
}
}
return true;
}
@Override
public ByteArrayInputStream nextElement() {
if (ended) {
throw new NoSuchElementException();
}
if (baos.available() != 0) {
return baos;
}
getNextBA();
return baos;
}
private void getNextBA() {
byte[] next;
try {
next = byteReader.read();
} catch (IOException e) {
throw new IllegalStateException("Issues reading byte arrays");
}
if (next == null) {
ended = true;
return;
}
this.baos = new ByteArrayInputStream(next);
}
};
SequenceInputStream sis = new SequenceInputStream(basEnum);