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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bjuth 中级黑马   /  2014-12-18 22:26  /  1249 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我看毕老师tcp复制图片的代码没有用缓冲 自己改了一下 反而错了
  1. public class Client {
  2.         public static void sop(Object obj) {
  3.                 System.out.println(obj);
  4.         }

  5.         public static void main(String[] args) throws Exception {

  6.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  7.                                 "d:\\FileInputStreamTest.jpg"));
  8.                
  9.                 Socket s = new Socket("localhost", 10000);
  10.                 BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());

  11.                 byte[] b = new byte[1024];
  12.                 while (bis.read(b) != -1) {
  13.                         bos.write(b);
  14.                 }
  15.                 s.shutdownOutput();
  16.                
  17.                 InputStream is = s.getInputStream();
  18.                 b = new byte[1024];
  19.                 int i = is.read(b);
  20.                 sop(new String(b, 0, i));
  21.                
  22.                 bis.close();
  23.                 bos.close();
  24.                 s.close();
  25.         }

  26. }
复制代码
  1. public class Server {
  2.         public static void sop(Object obj) {
  3.                 System.out.println(obj);
  4.         }

  5.         public static void main(String[] args) throws IOException {
  6.                 while (true) {
  7.                         ServerSocket ss = new ServerSocket(10000);
  8.                         Socket s = ss.accept();

  9.                         String ip = s.getInetAddress().getHostAddress();
  10.                         sop(ip);

  11.                         BufferedInputStream bis = new BufferedInputStream(
  12.                                         s.getInputStream());
  13.                         BufferedOutputStream bos = new BufferedOutputStream(
  14.                                         new FileOutputStream("d:\\FileOutputStreamTest.jpg"));

  15.                         byte[] b = new byte[1024];
  16.                         while (bis.read(b) != -1) {
  17.                                 bos.write(b);
  18.                         }

  19.                         OutputStream os = s.getOutputStream();
  20.                         os.write("上传成功!".getBytes());

  21.                         bis.close();
  22.                         bos.close();
  23.                         s.close();
  24.                         ss.close();
  25.                 }
  26.         }

  27. }
复制代码

求大神告知错在哪? 是缓冲空间太小?每次都是32k

8 个回复

倒序浏览
在下佩服佩服呀。。
回复 使用道具 举报
wzl963358694 发表于 2014-12-18 22:30
在下佩服佩服呀。。

是我犯了低级错误吗?搞不懂为什么不能用缓冲:'(
回复 使用道具 举报
a371166028 来自手机 中级黑马 2014-12-18 22:50:36
板凳
.貌似不可以使用缓冲流复制图片,mp3 就可以
回复 使用道具 举报
a371166028 发表于 2014-12-18 22:50
.貌似不可以使用缓冲流复制图片,mp3 就可以

是的 刚试了一下 mp3可以用缓冲流
jpg 客户端输出时不用缓冲流 用OutputStresm就ok 搞不懂
回复 使用道具 举报
肯定是可以用缓冲区流的!不知道楼主的错误是什么,把错误信息贴一下呗!之前我用缓冲区流复制时一直复制不全,老少4K数据,后来经验证是因为没有flush的原因。
回复 使用道具 举报
有了缓冲 就不需要再建立byte数组了  因为缓冲本身就是数组   直接一个字节一个字节读就好了  不然效率倒低了
回复 使用道具 举报
bjuth 中级黑马 2014-12-21 11:17:12
8#
huoxy 发表于 2014-12-19 19:27
肯定是可以用缓冲区流的!不知道楼主的错误是什么,把错误信息贴一下呗!之前我用缓冲区流复制时一直复制不 ...

确实是flush就能解决:)
回复 使用道具 举报
bjuth 中级黑马 2014-12-21 11:27:00
9#
有陷阱快跑丶 发表于 2014-12-19 23:48
有了缓冲 就不需要再建立byte数组了  因为缓冲本身就是数组   直接一个字节一个字节读就好了  不然效率倒低 ...

不理解 我看毕老师IO那块也是建立数组 循环遍历输出求代码:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马