通过byte []复制流

时间:2010-08-24 07:22:41

标签: java byte inputstream

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 /” 在其他流

问题是什么?我无法理解发生了什么。

希望有人能给我解决方案:)

问候

2 个答案:

答案 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);
}

当然读取单个字节效率不高。您应该考虑在下一个版本中使用字节数组。