我们一般解析文本文件的时候都会使用到字符流,如何使用字节流来独缺UTF8编码的文本文件呢?
try(FileInputStream fis=new FileInputStream(f)) {
int len=-1;
byte[] b=new byte[2];
ByteArrayOutputStream baos=new ByteArrayOutputStream();
while((len=fis.read(b))!=-1){
baos.write(b, 0, len);
}
System.err.println(baos.toString("UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
这里有几个问题 ,第一个问题是如果我们直接在while语句里面使用byte数组作为构造参数配合编码utf8打印出string 结果,会发现byte的大小会决定是否乱码,只有当byte的大小很大的情况下一次可以存储整个流的字节信息不回有问题,其他情况下都会出现问题,那是因为utf8编码的长度是不确定的,有可能分别为1,2,3.这时候byte'大小会导致编码被拆开,导致输出乱码
第二unicode只是规定了编码字符集,utf8是具体的实现存储方式自己实现的