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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rehan 中级黑马   /  2015-2-24 14:43  /  1308 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

RT:BufferedInputStream写入数据后可不刷新的。。。。。。。。如:
bos.write(by,0,len);
//bos.flush();

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

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油

查看全部评分

8 个回复

倒序浏览
流分为字节还有字符,一般记事本能打开的东西用字符流,其他用字节流。一个字符流失两个字节流,所以字符流传输效率比较高,flush一般是字符流用的,因为一次都两字节,所以用fluse。buffered++是一种高效流,无论字节还是字符。字节流读取一般有两种方式,一种一次读一个字节,还有一种一次读一个字符数组。readLine()是bufferedRead特有的读取方式,一次读一行。
回复 使用道具 举报 1 0
  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不执行关闭动作,那缓冲区中的数据不会被刷新到文件中。
字节流没有换行的概念。
字符流才有换行的概念,因为换行符本身就是字符,可以用来判断是否换行。

点评

想请问一下缓冲区里的数据容量是多少呢,如果把1G的数据全扔缓冲区了,是不是内存就爆了  发表于 2015-2-28 20:17

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
fantacyleo + 6 言简意赅
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
流在做关闭动作之前,会先刷新一次缓冲区。然后在关闭。
回复 使用道具 举报
万合天宜 发表于 2015-2-24 15:06
流分为字节还有字符,一般记事本能打开的东西用字符流,其他用字节流。一个字符流失两个字节流,所以字符流 ...

版主太牛逼了。。。。就要面试了,感谢斑竹大人的技术分
回复 使用道具 举报
BufferedInputStream就是装饰类,如果你能明白BufferedInputStream的read()方法的原理,你就知道用没用高效了
回复 使用道具 举报
本来就不用刷新
回复 使用道具 举报
学习了,看来交流是必须的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马