黑马程序员技术交流社区

标题: 什么时候该用流缓冲 [打印本页]

作者: bjuth    时间: 2014-12-18 22:26
标题: 什么时候该用流缓冲
我看毕老师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

作者: wzl963358694    时间: 2014-12-18 22:30
在下佩服佩服呀。。
作者: bjuth    时间: 2014-12-18 22:35
wzl963358694 发表于 2014-12-18 22:30
在下佩服佩服呀。。

是我犯了低级错误吗?搞不懂为什么不能用缓冲:'(
作者: a371166028    时间: 2014-12-18 22:50
.貌似不可以使用缓冲流复制图片,mp3 就可以
作者: bjuth    时间: 2014-12-18 23:06
a371166028 发表于 2014-12-18 22:50
.貌似不可以使用缓冲流复制图片,mp3 就可以

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

确实是flush就能解决:)
作者: bjuth    时间: 2014-12-21 11:27
有陷阱快跑丶 发表于 2014-12-19 23:48
有了缓冲 就不需要再建立byte数组了  因为缓冲本身就是数组   直接一个字节一个字节读就好了  不然效率倒低 ...

不理解 我看毕老师IO那块也是建立数组 循环遍历输出求代码:)





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