我们一般解析文本文件的时候都会使用到字符流,如何使用字节流来独缺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是具体的实现存储方式自己实现的