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));
}
}
}