IO流相当于这个管道,文件字节输入流将磁盘的数据一个个字节数组读数据到内存:
创建一个文件字节输入流管道与原文件接通:new 一个 FileInputStream对象
标准写法:InputStream is = new FileInputStream(“file-io-app\src\data02.txt”)
这个new byte[3] 表示这个桶(字节数组元素为3个)只能装3滴水(3个字节),这个数组 只能存储读到的3个字节




打印出来cbc:第二桶水是 【abc】 第三桶水只有两个字符 会变成 【cd c】 第三个c是第二桶水的c,第二桶没有倒干净
使用有参数: new String(buffer, 0, len2) len2表示读到的数据 ,0是从索引0第一个元素开始读,到len2结束 实现读多少用多少 (经常用)
package com.itheima.d4_byte_stream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;/*** 目标: 使用文件字节输入流每次读取一个字节数组的数据**/public class FileInputStreamDemo02 {public static void main(String[] args) throws Exception {// 创建一个文件字节输入流管道与原文件接通 (Java对不确定的事情会抛编译时异常)InputStream is = new FileInputStream("file-io-app\\src\\data02.txt");// // 定义一个字节数组,用于读取字节数组 用byte类型接收字节类型的数据 byte属于整型(很小范围)// // buffer是缓冲存储器的意思,这里用 桶 来形容// byte[] buffer = new byte[3]; // 这个桶存储3B(字节的数据)// int len = is.read(buffer); // 读取桶(存储器数组)里面的数据 // 得到每个字符对应的字节// System.out.println("读取到了几个字节:" + len);// // 进行编码 默认UTF-8// String rs = new String(buffer); // 将这个桶(字符数组)里面// System.out.println(rs); // 读了3滴水 abc//// int len1 = is.read(buffer); // 读取桶(存储器数组)里面的数据 // 得到每个字符对应的字节(这里是读取3个,因为桶里面只有3个)// System.out.println("读取到了几个字节:" + len1);// // 进行编码 默认UTF-8// String rs1 = new String(buffer); // 将这个桶(字符数组)里面// System.out.println(rs1); // 又读了3滴水 abc//// int len2 = is.read(buffer); //// System.out.println("读取到了几个字节: " + len2);// // 进行编码: // 读取多少数据,倒多少数据// String rs2 = new String(buffer,0,len2);// System.out.println(rs2); // cd//// int len3 = is.read(buffer);// System.out.println(len3); // 读取文件完毕,没有东西可读:返回-1// 使用 循环改进, 每次读取一个字节数组byte[] buffer = new byte[3]; // 这个桶(字节数组)里面存储3滴水(每次可以读3个字节)int len; // 记录每次读取的字节数while ((len = is.read(buffer)) != -1){ // 没有读到-1 就会执行下面的代码// 从buffer数组里面读,从0开始读, 读取到len(比如读到2个字节(可能只剩2个),就到2这里停)System.out.println(new String(buffer,0,len));}}}
