我创建了服务器程序,它将图像文件发送到客户端。 如果图像是512字节,我的程序工作正常。但它确实适用于大型文件。
在这种情况下,我没有得到我应该得到的确切图像。意味着我恢复的图像是以一些不正当的方式。那么如何解决这个问题
我在服务器中使用java套接字通道和java nio,而在客户端使用简单套接字。
由于 苏尼
答案 0 :(得分:1)
这是你的错误:
while(fileChannel.read(buffer)>0)
read()
方法不一定会填充缓冲区;它将读取任意数量的字节并返回该数字。您必须允许它读取的内容小于缓冲区的容量并且只写入那么多字节,这也是必要的,因为文件大小不一定是缓冲区大小的倍数,并且最后一次读取几乎不会完全填充缓冲区
在客户端也是如此 - available()
在这里没用,你必须简单地阅读然后处理你得到的许多字节。
答案 1 :(得分:0)
我没有看到你在客户端刷新和关闭输出流。当您突破时,您应该关闭()输出流,并且任何缓存的数据都将被写入文件。