A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 应国炎 于 2012-3-19 20:58 编辑

我看毕老师的视频,自己用Buffered...存储后,和直接用FileInputStream有很大区别。2.14M的图片,Buffered..拷的只有1.94M,一直找不到原因
  1. import java.net.*;
  2. import java.io.*;




  3. class TcpClient  
  4. {
  5.        
  6.         public static void main(String aas[]) throws Exception
  7.         {
  8.        
  9.                
  10.                        
  11.                         Socket ds= new Socket("192.168.1.106",10010);
  12.                         OutputStream out=ds.getOutputStream();
  13.                        
  14. /*Buffered...........................................................................................................................................................................................*/               
  15.                         BufferedReader bu=new BufferedReader(new InputStreamReader(new FileInputStream("165.jpg")));
  16.                         String line=null;
  17.                
  18.                         while((line=bu.readLine())!=null)
  19.                                         {       
  20.                                                 out.write(line.getBytes());
  21.                                                 //out.flush();
  22.                                         }
  23.                                        
  24. /*直接FileInputStream

  25.                                         FileInputStream bu=new FileInputStream("165.jpg");
  26.                                        
  27.                                         byte[] a=new byte[1024];
  28.                                         int num1=0;
  29.                                         while((num1=bu.read(a))!=-1)
  30.                                         {
  31.                                                 out.write(a,0,num1);
  32.                                         }

  33. */
  34.                                
  35.                                         ds.shutdownOutput();

  36.                                         InputStream in=ds.getInputStream();
  37.                                         byte[] bufIn=new byte[1024];
  38.                                         int num=in.read(bufIn);
  39.                                         System.out.println(new String (bufIn,0,num));

  40.                                         bu.close();
  41.                                         ds.close();
  42.                                         in.close();
  43.                                        
  44.         }
  45.        
  46. }


  47. class TcpServer
  48. {
  49.         public static void main(String add[]) throws Exception
  50.         {
  51.                        

  52.         ServerSocket ss=new ServerSocket(10010);
  53.         Socket s=ss.accept();


  54.                 InputStream in=s.getInputStream();
  55.                 FileOutputStream fos=new FileOutputStream("server.jpg");
  56.                
  57.                 byte[] buf=new byte[1024];

  58.                 int len=0;
  59.                 while((len=in.read(buf))!=-1)
  60.                 {
  61.                         fos.write(buf,0,len);
  62.                 }

  63.                 OutputStream out =s.getOutputStream();
  64.                 out.write("上传成功".getBytes());
  65.                
  66.                
  67.                 fos.close();
  68.                 s.close();
  69.                 ss.close();
  70.                 //out.close();

  71.         }
  72. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1 加油.

查看全部评分

10 个回复

倒序浏览
本帖最后由 程洪 于 2012-3-19 21:37 编辑

因为 你在客户端 读取的时候 是使用的字符流 而不是 字节流!

字符流 一般作用于用于读取文本,缓冲各个字符!

错误:19行————BufferedReader bu=new BufferedReader(new InputStreamReader(new FileInputStream("165.jpg")));

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
lz,图片是字节不是字符啊。你怎么可以用BufferedReader去读取呢。。。你应该换为BufferedInputStream。。。
回复 使用道具 举报
lz,图片是字节不是字符啊。你怎么可以用BufferedReader去读取呢。。。你应该换为BufferedInputStream。。。
回复 使用道具 举报
你确定你用bufferedReader拷的那1.9M能打开??
回复 使用道具 举报
肖岑锋 发表于 2012-3-19 21:32
你确定你用bufferedReader拷的那1.9M能打开??

可以打开,只是看不到任何显示
回复 使用道具 举报
应国炎 黑马帝 2012-3-19 21:50:10
7#
李爱军 发表于 2012-3-19 21:29
lz,图片是字节不是字符啊。你怎么可以用BufferedReader去读取呢。。。你应该换为BufferedInputStream。。 ...

嗯,不是说字符流和字节流转换了后,可以互相操作的吗。难道图片只能用字节流操作??
回复 使用道具 举报
应国炎 黑马帝 2012-3-19 21:51:14
8#
程洪 发表于 2012-3-19 21:26
因为 你在客户端 读取的时候 是使用的字符流 而不是 字节流!

字符流 一般作用于用于读取文本,缓冲各个字 ...

图片也可以用字符流来传输的吧。。难道是我记错了?
回复 使用道具 举报
魏群 黑马帝 2012-3-19 22:21:59
9#
BufferedReader 是一个装饰流 。public class BufferedReaderextends Reader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
是用来提高读取文本效率的。
读图片的话应该用BufferedInputStream 来装饰。
回复 使用道具 举报
丁佼 黑马帝 2012-3-19 22:42:33
10#
简而言之,
处理字符,使用***Reader和***Writer
处理字节,使用***InputStream和***OutputStream
*** 表示各种使用类的名字,File、Buffer等等。
回复 使用道具 举报
肖岑锋 发表于 2012-3-19 21:32
你确定你用bufferedReader拷的那1.9M能打开??

能打开的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马