【发布时间】:2018-09-23 08:04:19
【问题描述】:
File file = new File(path);
if (file.exists())
{
int count;
byte[] buffer = new byte[8192];
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(file));
while ((count = fileReader.read(buffer)) >= 0)
{
fileOut.writeObject(buffer);
fileOut.writeObject(count);
}
fileOut.writeObject("EOF");
fileReader.close();
}
以上是我最初用于将文件传输到套接字的服务器端代码。我首先发送一个名为“buffer”的字节数组,然后发送一个名为“count”的int变量,告诉客户端需要将多少字节的“buffer”数组写入文件,当文件传输完成时,我发送一个包含“ EOF”让客户端知道文件传输已经完成,以防止在客户端进一步读取。然而,当我运行这个程序时,奇怪的事情出现了,服务器发送的“缓冲区”数组的元素在第一次循环后没有改变,这意味着在第一次循环之后,服务器继续发送包含相同元素的“缓冲区”数组第一个循环中的那个,但我确实在fileOut.writeObject(buffer)被调用之前检查了数组的值,将它们打印到屏幕上,元素的值实际上发生了变化。然后通过在fileOut.writeObject(count)之后添加另一行代码buffer = new byte[8192]解决了这个问题,代码变为:
File file = new File(path);
if (file.exists())
{
int count;
byte[] buffer = new byte[8192];
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(file));
while ((count = fileReader.read(buffer)) >= 0)
{
fileOut.writeObject(buffer);
fileOut.writeObject(count);
buffer = new byte[8192];
}
fileOut.writeObject("EOF");
fileReader.close();
}
因此我想知道为什么每次在将文件字节读入“缓冲区”数组之前都需要初始化“缓冲区”数组,但是“缓冲区”数组的元素在每次循环结束时都没有初始化数组而发生变化.它与 ObjectOutputStream 的 writeObject() 方法的机制有关吗?我被敦促知道,感谢您的帮助!
PS:fileOut是一个实例变量,由以下代码初始化:
fileOut = new ObjectOutputStream(socket.getOutputStream());
【问题讨论】:
标签: java arrays serialization objectoutputstream