先看个例子:
String str = "测试";
System.out.println(str.getBytes().length);//6
System.out.println(str.getBytes("GBK").length);//4
大多数情况下,我们的环境编码都是UTF8,每个中文汉字就是3个字节.
那么,假设现在我要读一个字节流:
String str = "测试";
byte[] bytes = new byte[2];//如果改为3,则输出是正常的,但是如果str不止是中文,则还是会出现乱码.
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
int len;
StringBuilder sb = new StringBuilder();
while ((len = bis.read(bytes)) != -1) {
sb.append(new String(bytes, 0, len));
}
System.out.println(sb.toString());//����� 输出乱码.
1.使用Guava
2.先把byte[]读完,再一次性转String
3.读字节.