Java byte[] 转 String 陷阱
来源:互联网 发布:地方财政支出数据 编辑:程序博客网 时间:2024/05/18 00:28
今天在将byte[] 转为String,然后再转回byte[] 时发现一个奇诡的问题。byte[]长度出现了变化。
具体代码如下:
Map<String, Persion> map = new HashMap<String, Persion>(); map.put("cn1", new Persion("中国1", 30)); map.put("cn2", new Persion("中国2", 30)); Map<Integer, Map<String, Persion>> classes = new HashMap<Integer, Map<String, Persion>>(); classes.put(1, map); { Kryo kryo = new Kryo(); ByteOutputStream stream = new ByteOutputStream(); Output output = new Output(stream); kryo.writeClassAndObject(output, classes); output.flush(); byte[] bytes = stream.getBytes(); String str = new String(bytes,"utf-8"); byte[] bytes2 = str.getBytes("utf-8"); System.out.println(bytes.length + "\n" + str.length() + "\n" + bytes2.length); }
输出为:
102410161036
经过试验发现原来是编码问题:
ByteOutputStream 默认的编码是 "ISO8859-1" 而非 "utf-8".
所以在从Stream获取byte并转为String时必须指定为 "ISO8859-1"编码。
byte[] bytes = stream.getBytes(); String str = new String(bytes, "ISO8859-1"); byte[] bytes2 = str.getBytes("ISO8859-1"); System.out.println(bytes.length + "\n" + str.length() + "\n" + bytes2.length);<pre name="code" class="java">此时输出长度均为1024。
0 0
- Java byte[] 转 String 陷阱
- Java byte[] 转String
- java中String转byte[]
- Java中的byte转string
- java byte[]数组转String
- Java中byte[]转String问题
- Java中byte[]转String问题
- Java byte数组转String字符集问题
- Java之 byte[]转String问题
- java String byte 16
- byte[] to String (Java)
- java中byte数组和String字符串怎么相互转换?(string 转 byte[]和byte[] 转 string)
- 求助,Java中byte[]转String,String再转byte[] ,其结果不一样!!
- byte[]转String
- byte[] 转 String 笔录
- byte转String
- String 转byte[]
- string转byte
- Silverlight技术之Style和StaticResource
- WebViewJavascriptBridge-->实现JS和iOS之间的互调
- 【Android】数据库 sqLite
- 取消webView的弹窗
- HBase1.0.0版源码分析之HMaster启动代码分析(2)
- Java byte[] 转 String 陷阱
- 第三周 课后实践:项目三——程序的多文件组织
- 公开rtsp流媒体测试地址
- 《做最好的自己》阅读笔记
- 关于修改 sysctl.conf,如何使该文件在系统重启之后生效
- 导航中设置searchBar
- GLSurfaceView.Renderer
- npapi插件学习
- ImageView 的 scaleType 小结