为什么在循环中创建字节数组并复制它

时间:2016-03-23 18:54:08

标签: java bytearray objectoutputstream arraycopy

我不明白为什么在循环中创建字节数组并复制它。如果我不在循环中创建数组,代码将无法工作。请向我解释

ObjectOutputStream outt = new ObjectOutputStream(socket.getOutputStream());
InputStream f=new FileInputStream(path);
byte[] buffer=new byte[10000];
int n;
while ((n=f.read(buffer))>0)
{
    byte[] tmpBuff = new byte[10000];
    System.arraycopy(buffer, 0, tmpBuff, 0, n);
    total_length += n;
    outt.writeObject(new MyObject(tmpBuff));
}
f.close();

1 个答案:

答案 0 :(得分:1)

看来你正在写一个ObjectOutputStream,编写10,000个块。注意:您假设您的文件始终是10,000字节的精确倍数。

当您写入ObjectOutputStream时,它会跟踪它已经写入的任何对象。这意味着如果你要反复写buffer,它只会发送一次。一种解决方法是复制,但clone()会更简单。

更好的解决方案是

  • 在ObjectOutputStream上使用reset(),因此您可以多次发送相同的缓冲区。
  • 使用DataOutputStream代替传输数据而不是对象。
  • 只写你读的字节数。这样,您就可以处理不完全是10,000字节倍数的文件。