黑马程序员技术交流社区

标题: 上传图片文件损坏的问题 [打印本页]

作者: lzw123451    时间: 2013-2-24 14:28
标题: 上传图片文件损坏的问题
本帖最后由 李志卫 于 2013-2-24 21:39 编辑

以下例子要求上传图片
但我写的例子图片上传后有所损坏,为什么呢?


import java.net.*;
import java.io.*;

class TcpClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.2",10005);
File file = new File("C:\\星空.jpg");
BufferedInputStream bfi = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bfo = new BufferedOutputStream (s.getOutputStream());
BufferedReader bfr = new BufferedReader(new InputStreamReader(s.getInputStream()));

int by = 0;
while((by=bfi.read())!=-1)
{
   bfo.write(by);
}
   s.shutdownOutput();
                String line = null;
while((line=bfr.readLine())!=null)
System.out.println(line);
                s.close();
bfi.close();
bfo.close();
bfr.close();


}
}



class  TcpServer
{
public static void main(String[] args) throws Exception
{

ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept();
                File file = new File("F:\\星空.jpg");
String ip = s.getInetAddress().getHostAddress();
                BufferedInputStream bfi = new BufferedInputStream(s.getInputStream());
BufferedOutputStream bfo = new BufferedOutputStream (new FileOutputStream(file));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
System.out.println(ip+"...正在上传。");

int by = 0;
while((by=bfi.read())!=-1)
{
   bfo.write(by);
}
pw.println("文件上传成功");

s.shutdownOutput();


s.close();
ss.close();
bfi.close();
bfo.close();
pw.close();

}
}



作者: 李光耀    时间: 2013-2-24 15:57
本帖最后由 李光耀 于 2013-2-24 15:59 编辑

while((by=bfi.read())!=-1)
{
   bfo.write(by);
  bfo.flush();
客户端这块要刷新一下!!因为你只写到了BufferedOutputStream中 并没有写出去。
因为缓冲区8KB大小,写满就自动刷出去。 最后剩下一点不够8KB,所以没有刷出去,导致图片损坏。

毕老师 TCP协议 练习  常见问题  中有讲


作者: lzw123451    时间: 2013-2-24 21:03
李光耀 发表于 2013-2-24 15:57
while((by=bfi.read())!=-1)
{
   bfo.write(by);

不错,答案正确,谢谢。
作者: 李光耀    时间: 2013-2-24 21:15
李志卫 发表于 2013-2-24 21:03
不错,答案正确,谢谢。

你也觉得我回答的很好是不是,,,可为啥没斑竹出来给个技术分~~~
作者: lzw123451    时间: 2013-2-24 21:27
李光耀 发表于 2013-2-24 21:15
你也觉得我回答的很好是不是,,,可为啥没斑竹出来给个技术分~~~

因为 他不在电脑旁..............吧。 年轻人,别急躁。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2