Java 通过字节[]复制流

Java 通过字节[]复制流,java,byte,inputstream,Java,Byte,Inputstream,你好 我必须复制一个输入流。在网上搜索了一段时间后,我在bytearray的帮助下尝试了这个方法。我的代码如下所示(“is”是输入流): 而且很有效。。几乎 在这两个流中,程序仅每秒复制一个字符 因此,“is”-流中的“DOR A=“104”/>”变为: “O=14/” 在其他溪流中 有什么问题?我不明白发生了什么事 希望任何人都能给我答案:) 问候语这是因为通过在循环中调用read()两次,忽略了所有奇数字符,除非它们是-1。以下是使用缓冲区的正确方法(您可以调整缓冲区大小): 必须将whil

你好

我必须复制一个输入流。在网上搜索了一段时间后,我在bytearray的帮助下尝试了这个方法。我的代码如下所示(“is”是输入流):

而且很有效。。几乎

在这两个流中,程序仅每秒复制一个字符 因此,“is”-流中的“DOR A=“104”/>”变为: “O=14/” 在其他溪流中

有什么问题?我不明白发生了什么事

希望任何人都能给我答案:)


问候语

这是因为通过在循环中调用read()两次,忽略了所有奇数字符,除非它们是-1。以下是使用缓冲区的正确方法(您可以调整缓冲区大小):


必须将
while
循环中的读取字节分配给变量。在当前代码中,您只需放弃它。以下是正确的:

int b;
while((b = read()) != -1) {
    bos.write(b);
}

当然,读取单个字节不是很有效。你应该考虑在下一个版本中使用字节数组,

非常感谢!我知道问题出在哪里:)(因为我用了两次read方法,它跳了两次)它不正确。它不能编译。您不能在while条件内声明变量。@EJP:那么您为什么要回滚您的更正(并且可能选择了向下投票)?因为您的错误,我回滚了我的更正并向下投票。您可以自己修复它。@EJP您没有任何意义。此外,这是一个维基。纠正然后回退真的很不稳定。那么,为什么一开始就要努力修复它呢?
int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
  out.write(buffer, 0, count);
int b;
while((b = read()) != -1) {
    bos.write(b);
}