黑马程序员技术交流社区

标题: 发现一个小问题,BufferedInputStream [打印本页]

作者: rehan    时间: 2015-2-24 14:43
标题: 发现一个小问题,BufferedInputStream
RT:BufferedInputStream写入数据后可不刷新的。。。。。。。。如:
bos.write(by,0,len);
//bos.flush();

PS:我还想问一下啊,字节写入流如何进行提高效率?他没有BufferedReader一样的readLine方法吗?
也就是说只能使用数组的方法吗?

作者: 万合天宜    时间: 2015-2-24 15:06
流分为字节还有字符,一般记事本能打开的东西用字符流,其他用字节流。一个字符流失两个字节流,所以字符流传输效率比较高,flush一般是字符流用的,因为一次都两字节,所以用fluse。buffered++是一种高效流,无论字节还是字符。字节流读取一般有两种方式,一种一次读一个字节,还有一种一次读一个字符数组。readLine()是bufferedRead特有的读取方式,一次读一行。
作者: alvis2015    时间: 2015-2-24 15:07
  1. import java.io.*;
  2. public class BufferedInputStreamTest {

  3.         public static void main(String[] args)throws Exception {
  4.                 // TODO Auto-generated method stub
  5.                 BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("d:\\username.txt"));
  6.                 byte[] buf = new byte[1024];
  7.                 int len =0;
  8.                 len = bufis.read(buf);
  9.                 System.out.println(new String(buf,0,len));
  10.                
  11.                 BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("d:\\user1.txt"));
  12.                
  13.                 bufos.write(buf);
  14.                 //bufos.flush();//此处不刷新
  15.                 bufis.close();
  16.                 bufos.close();//此处关闭之间会自动刷新一次缓冲区,而不是不用刷新。
  17.         }
  18. }
复制代码

上面的代码,如果bufos不执行关闭动作,那缓冲区中的数据不会被刷新到文件中。
字节流没有换行的概念。
字符流才有换行的概念,因为换行符本身就是字符,可以用来判断是否换行。
作者: 艺多不压身丶    时间: 2015-2-24 17:44
流在做关闭动作之前,会先刷新一次缓冲区。然后在关闭。
作者: rehan    时间: 2015-2-25 20:20
万合天宜 发表于 2015-2-24 15:06
流分为字节还有字符,一般记事本能打开的东西用字符流,其他用字节流。一个字符流失两个字节流,所以字符流 ...

版主太牛逼了。。。。就要面试了,感谢斑竹大人的技术分
作者: liaohongjie    时间: 2015-2-25 20:43
BufferedInputStream就是装饰类,如果你能明白BufferedInputStream的read()方法的原理,你就知道用没用高效了
作者: 邓士林    时间: 2015-2-26 09:07
本来就不用刷新
作者: 新生小周    时间: 2015-2-26 09:30
学习了,看来交流是必须的




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