黑马程序员技术交流社区

标题: 拷贝文件,是不是缓冲区最快???? [打印本页]

作者: 戴进飘    时间: 2012-9-26 00:56
标题: 拷贝文件,是不是缓冲区最快????
本帖最后由 屈俊材 于 2012-9-26 07:51 编辑

拷贝文件时,是不是使用缓冲流最快了。
还有没有比这更快的。
  1. public static void CopyFile()
  2. {
  3. BufferedInputStream bis = null;

  4. BufferedOutputStream bos = null;

  5. try
  6. {
  7. bis = new BufferedInputStream(new FileInputStream("File.txt"));

  8. bos = new BufferedOutputStream(new FileOutputStream("CopyFile.txt"));

  9. byte[] by = new byte[bis.available()];

  10. bis.read(by);

  11. bos.write(by);

  12. }
  13. catch (IOException e)
  14. {
  15. throw new RuntimeException("复制失败");
  16. }
  17. finally
  18. {
  19. try
  20. {
  21. if(bis != null)
  22. bis.close();
  23. }
  24. catch (IOException e)
  25. {
  26. throw new RuntimeException("读取关闭失败");
  27. }
  28. try
  29. {
  30. if(bos != null)
  31. bos.close();
  32. }
  33. catch (IOException e)
  34. {
  35. throw new RuntimeException("写入关闭失败");
  36. }
  37. }
  38. }
复制代码

作者: 史龙贤    时间: 2012-9-26 01:11
有比缓冲区更快的方法,FileChannel,API摘要:用于读取、写入、映射和操作文件的通道。除了字节通道中常见的读取、写入和关闭操作外,此类还定义了下列特定于文件的操作: 将文件中的某个区域直接映射到内存中;对于较大的文件,这通常比调用普通的 read 或 write 方法更为高效。
通过FileInputStream的getChannel返回与此文件输入流有关的唯一 FileChannel 对象,再通过FileChannel对象的transferTo方法“将字节从此通道的文件传输到给定的可写入字节通道”。
作者: 史龙贤    时间: 2012-9-26 01:57
该通道的关键在于区分哪个文件有数据,哪个文件没数据,数据是从有数据的文件里流向没数据的文件。具体代码明天再说,你可以看下源码。

作者: 戴进飘    时间: 2012-9-26 13:28
史龙贤 发表于 2012-9-26 01:11
有比缓冲区更快的方法,FileChannel,API摘要:用于读取、写入、映射和操作文件的通道。除了字节通道中常见 ...

请问,在视频中有没有讲过这个类
作者: 史龙贤    时间: 2012-9-26 14:15
没有讲这个类,你可以查阅API,看源码来学习,不可能每个都讲到吧!讲些共性的,典型的,举一反三!
作者: 戴进飘    时间: 2012-9-26 15:38
史龙贤 发表于 2012-9-26 14:15
没有讲这个类,你可以查阅API,看源码来学习,不可能每个都讲到吧!讲些共性的,典型的,举一反三! ...

那也是。谢了




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