FileInputStream(字节输入流)不能读取文本文件的测试
- 这里我们不能读取文本文件其实只是不能使用字节输入流对文本文件进行读取后的输出(这里指的是对文件进行读取之后一部分一部分进行输出)这样一部分一部分进行输出这个时候就会出现乱码,但是这个时候如果我们使用字节输入流进行文件的读取之后直接对读取的数据进行写出,写出到另一文件中,这个时候我们可以使用字节输入流处理
结论 : 也就是如果我们是要对文本文件进行复制,这个时候我们可以使用字符流,也可以使用字节流
这里我们通过一个测试去理解这一句话:
- 下面这个例子中的hello.txt是一个文本文件,里面存有helloworld123中国人一共16个字符
package IO流.fileinputstream;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException{
/*
File类的实例化 - 指明源文件
*/
File file = new File("hello.txt");
/*
创建字节输入流对象
*/
FileInputStream fis = new FileInputStream(file);
/*
创建缓冲数组 -- 一次缓存5个byte数据
*/
byte [] bytes = new byte[5];
/*
创建一个临时变量 -- 用来接收read()方法的返回值
*/
int len = 0;
/*
这里我们使用了FileInputStream类中的read(byte [] b)方法,这个时候我们将文本文件中的文字数据
转换为byte类型的数据存储到了我们的参数byte []中 ---- 就相当于对文本文件中的char型数据进行编码
*/
while((len = fis.read(bytes)) != -1){
/*
将我们的bytes数组中存储的数据转换为String类型的数据 ---- 就相当于对byte []中存储的byte数组进行解码
*/
String str = new String(bytes);
System.out.println(str);
}
/*
关闭流资源
*/
fis.close();
}
}
- 这个时候我们只是想做一个测试 – 这个时候我们使用了throws + 异常类型的方式将异常对象进行了抛出
- 这个时候我们可以发现 – 我们的helloworld123正常输出,但是这个时候中国人这三个字中只有"国"字是正确的,而中字和人字都是乱码
结论: 我们不可以使用字节输入流对文本文件进行读取后的部分输出 — 这个时候可能会出现乱码
这个时候为什么会出现乱码 ? – 关于这个问题我们可以抽成三个问题
- 为什么helloworld123没有乱码?
- 为什么"中"和"人"出现了乱码?
- 问什么"国"字出现了乱码?
这里我们一一作出解释:
关于1: