【发布时间】:2010-11-07 06:53:45
【问题描述】:
我已经创建了一个服务器程序,它将向客户端发送一个图像文件。 如果图像是 512 字节,我的程序可以正常工作。但它确实适用于大文件。
在这种情况下,我没有得到我应该得到的确切图像。意味着我恢复的图像以某种不正确的方式出现。那么如何解决这个问题
我在服务器中使用 java 套接字通道和 java nio,而在客户端使用简单套接字。
谢谢 苏尼尔
【问题讨论】:
我已经创建了一个服务器程序,它将向客户端发送一个图像文件。 如果图像是 512 字节,我的程序可以正常工作。但它确实适用于大文件。
在这种情况下,我没有得到我应该得到的确切图像。意味着我恢复的图像以某种不正确的方式出现。那么如何解决这个问题
我在服务器中使用 java 套接字通道和 java nio,而在客户端使用简单套接字。
谢谢 苏尼尔
【问题讨论】:
我没有看到您在客户端刷新和关闭输出流。当你爆发时,你应该 close() 输出流,并且所有缓存的数据都将被写入文件。
【讨论】:
这是你的错误:
while(fileChannel.read(buffer)>0)
read() 方法不一定会填充缓冲区;它将读取任意数量的字节并返回该数字。您必须考虑到它读取的内容少于缓冲区的容量并且只写入那么多字节,这也是必要的,因为文件大小不一定是缓冲区大小的倍数,并且最后一次读取几乎永远不会完全填满缓冲区.
在客户端也是如此 - available() 在这里没有用,您必须简单地阅读然后处理您获得的任何字节数。
【讨论】: