IO流相当于这个管道,文件字节输入流将磁盘的数据一个个字节数组读数据到内存:
    创建一个文件字节输入流管道与原文件接通:new 一个 FileInputStream对象
    标准写法:InputStream is = new FileInputStream(“file-io-app\src\data02.txt”)
    这个new byte[3] 表示这个桶(字节数组元素为3个)只能装3滴水(3个字节),这个数组 只能存储读到的3个字节
    image.png
    image.png
    image.png
    image.pngimage.png
    打印出来cbc:第二桶水是 【abc】 第三桶水只有两个字符 会变成 【cd c】 第三个c是第二桶水的c,第二桶没有倒干净
    image.png
    使用有参数: new String(buffer, 0, len2) len2表示读到的数据 ,0是从索引0第一个元素开始读,到len2结束 实现读多少用多少 (经常用)
    image.png

    1. package com.itheima.d4_byte_stream;
    2. import java.io.FileInputStream;
    3. import java.io.FileNotFoundException;
    4. import java.io.InputStream;
    5. /**
    6. * 目标: 使用文件字节输入流每次读取一个字节数组的数据
    7. *
    8. */
    9. public class FileInputStreamDemo02 {
    10. public static void main(String[] args) throws Exception {
    11. // 创建一个文件字节输入流管道与原文件接通 (Java对不确定的事情会抛编译时异常)
    12. InputStream is = new FileInputStream("file-io-app\\src\\data02.txt");
    13. // // 定义一个字节数组,用于读取字节数组 用byte类型接收字节类型的数据 byte属于整型(很小范围)
    14. // // buffer是缓冲存储器的意思,这里用 桶 来形容
    15. // byte[] buffer = new byte[3]; // 这个桶存储3B(字节的数据)
    16. // int len = is.read(buffer); // 读取桶(存储器数组)里面的数据 // 得到每个字符对应的字节
    17. // System.out.println("读取到了几个字节:" + len);
    18. // // 进行编码 默认UTF-8
    19. // String rs = new String(buffer); // 将这个桶(字符数组)里面
    20. // System.out.println(rs); // 读了3滴水 abc
    21. //
    22. // int len1 = is.read(buffer); // 读取桶(存储器数组)里面的数据 // 得到每个字符对应的字节(这里是读取3个,因为桶里面只有3个)
    23. // System.out.println("读取到了几个字节:" + len1);
    24. // // 进行编码 默认UTF-8
    25. // String rs1 = new String(buffer); // 将这个桶(字符数组)里面
    26. // System.out.println(rs1); // 又读了3滴水 abc
    27. //
    28. // int len2 = is.read(buffer); //
    29. // System.out.println("读取到了几个字节: " + len2);
    30. // // 进行编码: // 读取多少数据,倒多少数据
    31. // String rs2 = new String(buffer,0,len2);
    32. // System.out.println(rs2); // cd
    33. //
    34. // int len3 = is.read(buffer);
    35. // System.out.println(len3); // 读取文件完毕,没有东西可读:返回-1
    36. // 使用 循环改进, 每次读取一个字节数组
    37. byte[] buffer = new byte[3]; // 这个桶(字节数组)里面存储3滴水(每次可以读3个字节)
    38. int len; // 记录每次读取的字节数
    39. while ((len = is.read(buffer)) != -1){ // 没有读到-1 就会执行下面的代码
    40. // 从buffer数组里面读,从0开始读, 读取到len(比如读到2个字节(可能只剩2个),就到2这里停)
    41. System.out.println(new String(buffer,0,len));
    42. }
    43. }
    44. }