【发布时间】:2014-08-29 15:07:49
【问题描述】:
我有一个方法“A”在每次调用时返回一个固定大小(例如 64 字节)的byte[outputSize]。我还有一个方法“B”需要输入可变大小的字节[inputSize](例如,它可以小于或大于 64 字节)。
我想使用一个流来提供从“A”到“B”的 64 字节块序列,而不会丢失任何单个字节。
我尝试将这些 64 位块提供给 ByteArrayOutputStream “out”,直到达到 out.size > inputSize。
然后从“out”的副本创建一个ByteArrayInputStream“in”,以使用从“in”读取的byte[inputSize] 提供方法“B”。
然后重置“out”并将未读字节复制到“out”。
这是实现这一目标的正确方法还是有更简单/更快/更好的方法?
这是一个伪代码示例:
ByteArrayOutputStream out = new ByteArrayOutputStream();
public byte[] A() {
return next64bytes;
}
public void B(byte[] bytes) throws IOException {
while (out.size() < bytes.length) {
out.write(A()); // feeding "out" with 64 bytes
}
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
in.read(bytes); // feeding "bytes" with bytes.length bytes
byte unread[];
in.read(unread = new byte[in.available()]);
out.reset();
out.write(unread); // basically writing unread bytes of "in" in an empty "out"
}
【问题讨论】:
-
ByteArrayOutputStream 会自动增长...你不需要手动增长它。
-
你能说得更具体点吗?我应该查看哪一行/几行代码?
-
[OFF] 英文没有“readed”。已读。 link
-
@TamásG。我刚刚在我的真实代码中修复了它。