黑马程序员技术交流社区

标题: 没有刷新流,没有关闭资源,为什么拷贝成功了? [打印本页]

作者: 徐升2013    时间: 2013-4-6 17:08
标题: 没有刷新流,没有关闭资源,为什么拷贝成功了?
本帖最后由 徐升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. }
复制代码
代码如上。没执行刷新操作,没执行关闭流的操作。。。拷贝也成功了。真心费解了。。


作者: 郭彦君    时间: 2013-4-6 18:00
刷新也就是flush方法的用处在于:你如果想要立即输出内容,比如想打印到控制台上时才刷新,如果只为了写到别处,那就不用刷新。
close方法不影响你前面的读写操作,没关闭只能说明内存中还有数据,关闭后数据就没了。
作者: 刘策    时间: 2013-4-6 18:17
字节流缓冲区好像不用刷新,用刷新的是字符流,因为这个流要查表。
作者: yangyinhui    时间: 2013-4-6 18:28
你这段代码是拷贝文件从一处拷贝到另一处只是把一个文件读出来再写出去,所以不用刷新,你没有关闭流只能说你这段代码写的不太完美,是不影响执行结果的,为了养成良好的编程习惯,还是最好把不用的流都关闭了。
作者: 奋斗2013    时间: 2013-4-6 19:01
close()方法关闭流,是为了释放与当前输入输出流有关的系统资源。
flush()方法刷新一般为输出流,并强制写入缓冲的所有字节数组。
你上面的代码是利用文件输入流FileInputStream和缓冲输入BufferedInputStream读取数据。
利用文件输出流FileOutPutStream和缓冲输出流BufferedOutputStream写出数据。
不关闭输出流不影响拷贝,即文件的读取操作。
但是不刷新输出流会影响文件的读取操作。




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