HIHO,
我必须复制一个输入流。经过网络搜索后,我在一个bytearray的帮助下尝试了这个。我的代码看起来像这样(“是”是输入流):
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (is.read() != -1) {
bos.write(is.read());
}
byte[] ba = bos.toByteArray();
InputStream test = new ByteArrayInputStream(ba);
InputStream test2 = new ByteArrayInputStream(ba);
它有效..几乎
在两个流中,程序仅复制每隔一个字符 所以“DOR A =”104“/>”在“是” - 流变成: “O = 14 /” 在其他流
问题是什么?我无法理解发生了什么。
希望有人能给我解决方案:)
问候
答案 0 :(得分:16)
那是因为你忽略了所有奇数字符,除非它们是-1,通过在循环中调用read()两次。这是使用缓冲区的正确方法(您可以调整缓冲区大小):
int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
out.write(buffer, 0, count);
答案 1 :(得分:6)
您必须将while
循环中的读取字节分配给变量。在您当前的代码中,您只需丢弃它。以下是正确的:
int b;
while((b = read()) != -1) {
bos.write(b);
}
当然读取单个字节效率不高。您应该考虑在下一个版本中使用字节数组。