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

Java 为什么要在循环中创建字节数组并复制它,java,bytearray,objectoutputstream,arrays,Java,Bytearray,Objectoutputstream,Arrays,我不明白为什么要在循环中创建字节数组并复制它。如果我不在循环中创建数组,代码将无法工作。请向我解释 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[]

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

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();

看起来您正在写入ObjectOutputStream,写入10000个块。注意:您假设您的文件始终是10000字节的精确倍数

当您写入ObjectOutputStream时,它会跟踪它已经写入的任何对象。这意味着,若要重复写入缓冲区,它只会发送一次。一种解决方法是复制,尽管克隆会更简单

更好的解决办法是

在ObjectOutputStream上使用reset,以便可以多次发送相同的缓冲区。 在传输数据而不是对象时使用DataOutputStream。 只写你读到的字节数。通过这种方式,您可以处理不完全是10000字节倍数的文件。
这个代码对我来说没什么意义。你想达到什么目标?MyObject应该代表什么?