BufferedInputStream

BufferedInputStream是字节流在创建 BufferedlnputStream时,会创建一个内部缓冲区数组.

BufferedOutputStream

BufferedOutputStream是字节流,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必对每次字节写入调用底层系统

案例:

需求:

编程完成图片/音乐的拷贝(要求使用Buffered..流).

实现:

  1. package test;
  2. import java.io.*;
  3. /**
  4. * 演示使用BufferedOutputStream 和 BufferedInputStream使用
  5. * 使用他们,可以完成二进制文件拷贝.
  6. * 思考:字节流可以操作二进制文件,可以操作文本文件吗?当然可以
  7. */
  8. public class Main {
  9. public static void main(String[] args) {
  10. String srcFilePath = "D:\\picture.jpg";
  11. String destFilePath = "D:\\p.jpg";
  12. //String srcFilePath = "D:\\a.txt";
  13. //String destFilePath = "D:\\a副本.txt";
  14. //创建BufferedOutputStream对象BufferedInputStream对象
  15. BufferedInputStream bis = null;
  16. BufferedOutputStream bos = null;
  17. try {
  18. //因为 FileInputStream 是 InputStream 子类
  19. bis = new BufferedInputStream(new FileInputStream(srcFilePath));
  20. bos = new BufferedOutputStream(new FileOutputStream(destFilePath));
  21. //循环的读取文件,并写入到 destFilePath
  22. byte[] buff = new byte[1024];
  23. int readLen = 0;
  24. //当返回 -1 时,就表示文件读取完毕
  25. while ((readLen = bis.read(buff)) != -1) {
  26. bos.write(buff, 0, readLen);
  27. }
  28. System.out.println("文件拷贝完毕~~~");
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. } finally {
  32. //关闭流 , 关闭外层的处理流即可,底层会去关闭节点流
  33. try {
  34. if(bis != null) {
  35. bis.close();
  36. }
  37. if(bos != null) {
  38. bos.close();
  39. }
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }
  45. }

image.png
image.png