我不明白为什么在循环中创建字节数组并复制它。如果我不在循环中创建数组,代码将无法工作。请向我解释
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();
答案 0 :(得分:1)
看来你正在写一个ObjectOutputStream,编写10,000个块。注意:您假设您的文件始终是10,000字节的精确倍数。
当您写入ObjectOutputStream时,它会跟踪它已经写入的任何对象。这意味着如果你要反复写buffer
,它只会发送一次。一种解决方法是复制,但clone()
会更简单。
更好的解决方案是
reset()
,因此您可以多次发送相同的缓冲区。