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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐升2013 于 2013-4-6 18:47 编辑
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 BufferedInputStream bfin = null;
  4.                 BufferedOutputStream bfot = null;
  5.                 try {
  6.                         bfin = new BufferedInputStream(
  7.                                         new FileInputStream("d:" + File.separator + "1.mp3"));
  8.                         bfot = new BufferedOutputStream(
  9.                                         new FileOutputStream("d:" + File.separator + "2.mp3"));

  10.                         byte[] buf = new byte[1024 * 1024 * 2];

  11.                         int len = 0;
  12.                         while ((len = bfin.read(buf)) != -1)

  13.                         {
  14.                                 bfot.write(buf, 0, len);System.out.println("拷贝完成");
  15.                         }
  16.                         

  17.                 }

  18.                 catch (Exception e) {
  19.                         System.out.println("拷贝文件失败" + e.toString());
  20.                 }

  21.         
  22.         }
  23. }
复制代码
代码如上。没执行刷新操作,没执行关闭流的操作。。。拷贝也成功了。真心费解了。。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
刷新也就是flush方法的用处在于:你如果想要立即输出内容,比如想打印到控制台上时才刷新,如果只为了写到别处,那就不用刷新。
close方法不影响你前面的读写操作,没关闭只能说明内存中还有数据,关闭后数据就没了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
字节流缓冲区好像不用刷新,用刷新的是字符流,因为这个流要查表。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
你这段代码是拷贝文件从一处拷贝到另一处只是把一个文件读出来再写出去,所以不用刷新,你没有关闭流只能说你这段代码写的不太完美,是不影响执行结果的,为了养成良好的编程习惯,还是最好把不用的流都关闭了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
close()方法关闭流,是为了释放与当前输入输出流有关的系统资源。
flush()方法刷新一般为输出流,并强制写入缓冲的所有字节数组。
你上面的代码是利用文件输入流FileInputStream和缓冲输入BufferedInputStream读取数据。
利用文件输出流FileOutPutStream和缓冲输出流BufferedOutputStream写出数据。
不关闭输出流不影响拷贝,即文件的读取操作。
但是不刷新输出流会影响文件的读取操作。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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