字节输入流一次读取多个字节的方法 int read(byte[] b) len记录的是有效字节个数 明确两件事情: 1.方法的参数byte[] byte数组的作用? 缓冲作用,存储每次读取到的多个字节 数组长度一般定义为1024(1KB 或者1024的整数倍) 2.方法的返回值int又是什么 记录的是有效字节个数 String类的构造方法: String(byte[] bytes):把字节数组转换为字符串 String(byte[] bytes,int offset,int length);把字节数组的一部分转换为字符串 offset是数组的开始索引 length是转换的字节个数
package demo02;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class Demo02InputStream {
public static void main(String[] args) throws IOException {
//创建FileInputStream对象,构造方法中确定要读取的数据源
FileInputStream fis = new FileInputStream("D:\IdeaProjects\新建文件夹\c.txt");
//使用FileInputStream对象中的方法read读取文件
byte[] bytes = new byte[1024];//byte数组存储读到的多个字节
int len =0; //记录每次读取的有效字节个数
while((len=fis.read(bytes))!=-1){
//System.out.println(new String(bytes)); //ABCDE后面有很多空格因为1024位嘛,所以可以使用第二种构造方法来只转有效的
System.out.println(new String(bytes,0,5));//ABCDE
}
//释放资源
fis.close();
}
}
注意看打印的内容
原理:
右边一次读取(输入到内存中不就是读取嘛)多个字节 :
1.硬盘中 ABCDE 结束标志
2.new FileInputStream创建流对象指向文件
3.创建数组byte[] 长度是2 初始值默认是0
4.读取数据用fis.read(bytes);(过程read()->jvm->os->操作系统方法读取数字)这个方法返回值是int(读取数据的个数)
5.第一次读取 指针指向A 数组还有个位置所以又读了B
6.len记录的是有效字节个数
7.第三次读取 len=1 指针指向E 为什么是ED呢 因为是E把C在数组中覆盖了
第四次读取,指针已经在结束标志,没有读到数据返回-1(结束标志返回给os os给jvm jvm给我们返回-1,说明读到结束标志了)
8.数组:起到缓冲作用,存储读取到的多个字节



