字节输入流一次读取多个字节的方法
int read(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组
明确两件事情:
1、方法的参数byte[] 的作用
起到缓冲作用,存储每次读取到的多个字节
数组的长度定义为1024(1kb)或者是1024的整数倍
2、方法的返回值int是什么?
每次读取的有效字节个数
String类的构造方法之一
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 |
---|
作用:把字节数组转换为字符串
String类的构造方法之二
String(byte[] bytes, int offset, int length) | 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 |
---|
作用:把字节数组的一部分转换为字符串
构造参数的作用
int offset:数组的开始索引
int length:转换的字节个数
============
约定文件路径及文件内容,如图:
字节 输入流一次读取多个字节
package com.baidu.字节输入输出流;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class InputStream02 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");
byte[] bytes1 = new byte[2];
int read = fis.read(bytes1);
System.out.println(read);//打印2 每次打印读取的个数是2
System.out.println(Arrays.toString(bytes1));//[65, 66]
System.out.println(new String(bytes1));//AB
read = fis.read(bytes1);
System.out.println(read);
System.out.println(new String(bytes1));
read = fis.read(bytes1);
System.out.println(read);//读到1 ,这说明读到了一个有效字节数
System.out.println(new String(bytes1));
read = fis.read(bytes1);
System.out.println(read);//读到-1 ,这说明读到了结束标记
System.out.println(new String(bytes1));//因为我们定义的是两个字节数组,所以即使返回-1也必然是返回两个字母
fis.close();
}
}
程序结果:
发现以上读取的是一个重复的过程,可以使用循环优化
不知道文件有多少字节,可以使用while循环
while循环结束条件,读取到-1结束
字节 输入流一次读取多个字节(优化升级,使用while循环)String(byte[] bytes)
Java中字节 输入流一次读取多个字节代码实现和原理-图文分析
31/100
Attsky
<没有设置>
package com.baidu.字节输入输出流;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class InputStream02 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");
byte[] bytes = new byte[1024];//存储读取到的多少字节
int len = 0;
while((len=fis.read(bytes))!=-1){
System.out.println(bytes);//可打印数组的地址值,这个程序中没有意义
System.out.println(new String(bytes));//转换成字符串,用到了String的构造方法,匿名
}
//释放资源
fis.close();
}
}
字节 输入流一次读取多个字节(优化升级,使用while循环)String(byte[] bytes, int offset, int length)
package com.baidu.字节输入输出流;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class InputStream02 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");
byte[] bytes = new byte[1024];//存储读取到的多少字节
int len = 0;
while((len=fis.read(bytes))!=-1){
System.out.println(bytes);//可打印数组的地址值,这个程序中没有意义
System.out.println(new String(bytes,0,len));//转换成字符串,用到了String的构造方法,匿名
}
//释放资源
fis.close();
}
}
数组的默认值是0
数组的下标是从1开始的
数组:缓存作用,存储读到的多个字节
new byte[5]:一次读取5个字节,可提高读取效率