- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 是如何编码解码的.pdf
j ava 是如何编码解码的
j ava是如何编码解码的
在上篇博客中LZ 阐述了j ava各个渠道转码的过程,阐述了j ava在运⾏过程中那些步骤
在进⾏转码,在这些转码过程中如果⼀处 现问题就很有可能会产⽣乱码 !下⾯LZ就
讲述j ava在转码过程中是如何来进⾏编码和解码操作的。
编码解码
在上篇博客中LZ 阐述了三个渠道的编码转换过程,下⾯LZ将结束j ava在那些场合需要
进⾏编码和解码操作,并详序中间的过程,进⼀步掌握j ava的编码和解码过程。在j ava
中主要有四个场景需要进⾏编码解码操作:
1 :I/O操作
2 :内存
3 :数据库
4 :j avaWeb
下⾯主要介绍前⾯两种场景,数据库部分只要设置正确编码格式就不会有什么问题,
j avaWeb场景过多需要了解URL 、get 、POST的编码,servlet的解码,所以j avaWeb场
景下节LZ介绍。
I/O操作
在前⾯LZ就提过乱码问题⽆⾮就是转码过程中编码格式的不统⼀产⽣的,⽐如编码时
采⽤UTF-8 ,解码采⽤GBK ,但最根本的原因是字符到字节或者字节到字符的转换
问题了,⽽这中情况的转换最主要的场景就是I/O操作的时候。当然I/O操作主要包括
⽹络I/O (也就是j avaWeb )和磁盘I/O 。⽹络I/O下节介绍。
⾸先我们先看I/O的编码操作。
I putStream为字节输⼊流的所有类的超类,Reader为读取字符流的抽象类。j ava读取
⽂件的⽅式分为按字节流读取和按字符流读取,其中I putStream 、Reader是这两种读
取⽅式的超类。
按字节
我们⼀般都是使⽤I putStream .read()⽅法在数据流中读取字节 (read()每次都只读取⼀
个字节,效率⾮常慢,我们⼀般都是使⽤read(byte[]) ),然后保存在⼀个byte[]数组
中,最后转换为Stri g 。在我们读取⽂件时,读取字节的编码取决于⽂件所使⽤的编
码格式,⽽在转换为Stri g过程中也会涉及到编码的问题,如果两者之间的编码格式
不同可能会 现问题。例如存在⼀个问题test .txt编码格式为UTF-8 ,那么通过字节流
读取⽂件时所获得的数据流编码格式就是UTF-8 ,⽽我们在转化成Stri g过程中如果不
指定编码格式,则默认使⽤系统编码格式 (GBK )来解码操作,由于两者编码格式不
⼀致,那么在构造Stri g过程肯定会产⽣乱码,如下:
File file = new File(C:\\test.txt);
InputStream input = new FileInputStream(file);
StringBuffer buffer = new StringBuffer();
byte ] bytes = new byte 1024];
for(int n ; (n = input.read(bytes))!=-1 ; ){
buffer.append(new String(bytes,0,n));
}
System.out.println(buffer);
输 结果:锘挎垜鏄?cm
test .txt 中的内容为:我是 cm 。
要想不 现乱码,在构造Stri g过程中指定编码格式,使得编码解码时两者编码格式
保持⼀致即可:
buffer.append(new String(bytes,0,n,UTF-8));
按字符
其实字符流可以看做是⼀种包装流,它的底层还是采⽤字节流来读取字节,然后它使
⽤指定的编码⽅式将读取字节解码为字符。在j ava 中Reader是读取字符流的超类。所
以从底层上来看按字节读取⽂件和按字符读取没什么区别。在读取的时候字符读取每
次是读取留个字节,字节流每次读取⼀个字节。
字节字符转换
字节转换为字符⼀定少不了I putStreamReader 。API解释如下:I putStreamReader 是
字节流通向字符流的桥梁:它使⽤指定的 charset 读取字节并将其解码为字符。它使⽤
的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 每次调⽤
I putStreamReader 中的⼀个 read() ⽅法都会导致从底层输⼊流读取⼀个或多
您可能关注的文档
最近下载
- 利用DEFORM-3D模拟镦粗锻造.doc VIP
- 08 威科夫进阶课程.pdf VIP
- CB 673-2020 出入舱口盖规范.pdf
- GA_T 1788.1-2021 公安视频图像信息系统安全技术要求 第1部分:通用要求.doc VIP
- 大体积混凝土监理实施细则.docx VIP
- (正式版)D-L∕T 343-2010 额定电压66kV~220kV交联聚乙烯绝缘电力电缆GIS终端安装规程.docx VIP
- 危险化学品安全管理与安全技术培训.ppt VIP
- GPS33E巨人通力调试说明书.pdf VIP
- 重大接待保障措施(环卫作业).doc VIP
- 危险物品安全航空运输技术细则(20201016014015).pdf VIP
文档评论(0)