【206天】黑马程序员27天视频学习笔记【Day20-下】

叨逼叨两句

  1. 在人人都会编程的时代,老程序员的价值在哪里?编的更熟练吗?NONONO,必须和新人从不同维度竞争。
  2. 跟包容性强的人聊天感觉就是好
  3. 清醒的努力+选择,在3-5年成为业界80分水准的程序员
  4. 清醒的努力+选择,在一个方向专研,用10年时间成为99分的技术专家兼程序员。
  5. 清醒的努力+选择,用10年时间成为一个懂金融、懂营销、会写作、会演讲同时又“恰好会编程“的人。
  6. 大胆列计划【JavaEE、JavaWeb入行,往大数据方向转】、JavaScript【业余学习,应对物联网】、Python【业余学习,应对人工智能,并研究研究量化金融】的专家。

20-11:BufferedInputStream和BufferedOutputStream拷贝

  1. 缓冲思想

    1. 字节流一次读写一个数组的速度明显比一次读一个字节快很多
  2. BufferedInputStream

    1. BufferedInputStream内置一个缓冲区(数组
    2. Java程序读取硬盘上的文件数据时,不会直接从文件将字节往内存中的Java程序输送,而是使用BufferedInputStream作为缓冲区,先将文件中字节一次性装满BufferedInputStream的8192个字节数组,然后再由Java程序一个个读取缓冲区的数据
  3. BufferedOutputStream

    1. BufferedOutputStream内置一个缓冲区(数组)
    2. Java向硬盘中写出文件数据时,不会直接从Java程序将数据往硬盘上写,而是使用BufferedOutputStream作为缓冲区,先由Java程序一个个将BufferedOutputStream的8192个字节装满,然后再将这些字节一次性写入硬盘上的文件
  4. 原理图如下:
package com.test.demo001;  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{         //demo01();         FileInputStream fis = new FileInputStream("20.avi");         FileOutputStream fos = new FileOutputStream("copy.avi");         BufferedInputStream bis = new BufferedInputStream(fis);         BufferedOutputStream bos = new BufferedOutputStream(fos);         int b;         while((b = bis.read())!= -1){             bos.write(b);         }                  bis.close();         bos.close();         }      private static void demo01() throws FileNotFoundException, IOException {         FileInputStream fis = new FileInputStream("cccccc.txt");         FileOutputStream fos = new FileOutputStream("bbbbbb.txt");         byte[] arr = new byte[2];         int len; //读到的有效字符个数         while((len = fis.read(arr))!= -1){             fos.write(arr,0,len);         }         fis.close();         fos.close();     } } 

20-12:flush和close方法的区别

  1. flush()方法可用来刷新缓冲区,刷新后再次写出
  2. close()方法用来关闭流释放资源,如果是带缓冲区的流对象的close方法,关闭流之前会对缓冲区进行刷新,关闭后也不能再写出。
  3. 为什么要刷新?因为不刷新数据会留在缓冲区一部分【小于8192字节的那部分】,导致拷贝的文件不完整。
public class Demo009 {     public static void main(String[] args) throws IOException{         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("20.avi"));         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.avi"));         int b;         while((b = bis.read())!= -1){             bos.write(b);         }         bis.close();         bos.close();     }

20-13:字节流读写中文

  1. 字节流读中文的问题:可能出现读到半个中文乱码的情况

    package com.test.demo001;  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{                  FileInputStream fis = new FileInputStream("b.txt");         byte[] arr = new byte[2];         int len;         while((len = fis.read(arr))!= -1){             System.out.println(new String(arr,0,len));         }              } } 
  1. 字节流写出中文的问题:

    1. 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
    2. 写出回车换行write(“rn”.getBytes());
    package com.test.demo001;  import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{         FileOutputStream fos = new FileOutputStream("b.txt");         fos.write("你好世界".getBytes());         fos.write("rn".getBytes());                 fos.write("你好世界".getBytes());              } } 

20-14:流的标准处理异常代码1.6版本及其以前

package com.test.demo001;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{         FileInputStream fis = null;         FileOutputStream fos = null;         try {             fis = new FileInputStream("b.txt");             fos = new FileOutputStream("c.txt");             int b;             while((b = fis.read())!= -1){                 fos.write(b);             }         } finally {             try {                 if(fis != null){                     fis.close();                 }             } finally {                 fos.close();             }         }     } } 

20-15:流的标准处理异常代码1.7版本

  1. ()中的对象必须实现AutoCloseable接口
package com.test.demo001;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{         try(             FileInputStream fis = new FileInputStream("b.txt");             FileOutputStream fos = new FileOutputStream("c.txt");         ){             int b;             while((b = fis.read())!= -1){                 fos.write(b);             }         }     } }  class MyClose implements AutoCloseable {      @Override     public void close() throws Exception {         System.out.println("我自动关闭了");     }      } 

20-16:图片加密

  1. 将写出的字节异或一个数,这个数就是密钥,解密的时候再次异或就可以了。
package com.test.demo001;  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;  public class Demo009 {     public static void main(String[] args) throws IOException{         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("dd.jpeg"));         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ee.jpeg"));         int len;         while((len = bis.read())!= -1){             bos.write(len ^ 123);         }          bis.close();         bos.close();             } }  

20-17:在控制台录入文件的路径,将文件拷贝到当前项目下

 package com.test.demo001;  import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner;  public class Demo009 {     public static void main(String[] args) throws IOException{                  File file = getFile();                  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));                  int len;         while((len = bis.read())!= -1){             bos.write(len);         }                   bis.close();         bos.close();             }          public static File getFile(){         Scanner sc = new Scanner(System.in);         System.out.println("请输入一个文件路径");         while(true){             String line = sc.nextLine();                 File file = new File(line);             if(!file.exists()){                 System.out.println("录入的路径文件不存在");             } else if(file.isDirectory()) {                 System.out.println("录入的路径是文件夹,请重新输入");             } else {                 return file;             }         }               }           } 

20-18:录入数据,拷贝到文件

package com.test.demo001;  import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner;  public class Demo009 {     public static void main(String[] args) throws IOException{         Scanner sc = new Scanner(System.in);         FileOutputStream fos = new FileOutputStream("text.txt");         System.out.println("请输入数据:");         while(true){             String line = sc.nextLine();             if("quit".equals(line)){                 break;             }              fos.write(line.getBytes());             fos.write("rn".getBytes());         }     } } 

脚本宝典为你提供优质服务
脚本宝典 » 【206天】黑马程序员27天视频学习笔记【Day20-下】

发表评论

提供最优质的资源集合

立即查看 了解详情