因为曾经干了啥事儿,才印象特别深刻。
将byte存入String的后果
String res = “”;
res += (char) 0xc3;
byte[] bytes = res.getBytes();
这是曾经的一部分程序。习惯使用String,并在之前并没有遇到任何错误。但是这次遇到了。
bytes里面不止一个byte,而是两个。这导致“数据异常”。
原来,java中的char是2个字节。如果小于256,在获取字符串字节时,就被认为是一个byte,但是大于时,就被识别为2个字节。
改进:后来,学习了解了ByteArrayOutputStream,用它来存取具有扩张性的字节数组,再好不过。
ByteArrayOutputStream输出的编码问题
ByteArrayOutputStream stream = new ByteArrayOutputStream();
……
stream.toString();
一般情况下,直接toString没有什么问题。但是,一旦byte位上超过127时,就可能出现多字节现象。
问题: widows运行环境默认编码gbk。运行toString时,原本0xc3一个字节,编程了3个字节的内容。
处理:指定编码——stream.toString(“utf-8”);
好处:指定了编码后,就保证了唯一性。除非系统不支持,否则都不会有不同的结果出来。