您的位置:首页 > 编程语言 > Java开发

Java:CoreJava篇:java.lang.String.getBytes()探索

2015-12-20 12:50 267 查看

CoreJava部分是java部分核心的语法和工具,在ME,SE,EE中都是通用的,探索CoreJava对于Java学习是很有帮助的,查看了解Java系统级代码的编写对前期java学习帮助极大,极力推荐eclipse等关联jdk中的java源码

这次探索的是

java.lang.String.getBytes();


起因:本来是想要写一个java字符串的编码检测函数,却意外的发现自己对getBytes这个函数不是很了解,趁这个BLOG,记下自己对它的理解,防止忘记

材料:jdk,String(字符串)
这要用String说起:
String是一个十分常用的Java类,常用到任何一个java程序都离不开这个java类,不信,你看:
public static void main(<span style="color:#ff0000;">String</span>[] args) {}
同时这个类也是一个十分特殊的类,final修饰整个类,object类中都有String的身影(鸡生蛋还是蛋生鸡。。。)
String本质是字符串,字符数组,它的存储也是以 字符数组 的形式存放的(因为这句话十分重要,这里就先用红色标注出来!)

同时由于历史原因,字符编码繁多,这就造成了在编程中十分常见的一个事情:编码不对应造成的乱码,这个时候你就会发现,几乎没办法操作已经编码好的字符数组(字符是基本类型),于是,你就需要回到这个函数里面了,java.lang.String.getBytes()函数
百度java 字符串编码转换大概是都是
String newStr = new String(oldStr.getBytes(oldEnc),newEnc);


这其中getBytes()就有一个中间桥梁的作用;
但会用不是我们的目的,我们的目的是理解它底层的原理,理解了底层的原理,再怎么用都不会出错的,
这时,我们就要记住上面那句红色的话了,String的存储是以char数组的形式存放的,翻开jdk源码有这一句:
StringCoding.encode(charsetName, value, offset, count);

“GBK”--->utf-8转换-->GBK-UTF-8乱码-->getByte("UTF-8")--->new String(Bytes,"UTF-8");//正常UTF-8字符串

因为jdk内部对编码的兼容度还是比较高的,所以现在也很难在普通应用中出现编码错乱,除了Web应用时候出现的几率大些……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息