java-io读写研究(一)

       写在前面的话:本文主要是研究io读写底层的相关原理,由于本人不是计算机专业的程序员,所以编写本文的目的更多的是想将表面的java API和计算机底层的相关知识联系起来。如果只是想快速使用java API,不建议阅读本文.

       我们以读取文件为例,开始我们的底层研究。我们现在随便打开的一个文件,其中包含的任意一段文字,其实都是字节序列。简单来说,比如我们的txt里面有“ABC”这样的一段文字,那么'A'、'B'、'C'就是三个字符,我们大部分人用的都是windows系统,所以记事本打开后的文字都是默认为ANSI编码。ANSI?什么意思呢?其实很简单,刚开始的电脑都是懂英文的人在用,那个时候默认用的是ASCII,其他的语言根本无法在电脑上显示(例子就是英文DOS系统)。

       到了后来,各个国家的牛人,慢慢的琢磨出了自己的编码标准,在中国,就是GBK编码,用两个字节来代表一个中文字符,这种以两个字节表示一个汉字字符的方式,称为ANSI,也就是各个国家自己有自己本地化的编码,不同国家有不同的ANSI具体编码.(其实ANSI翻译成中文就是各种外文字符延伸编码方式

       再往后,如果各个国家都是用自己的ANSI来编码,那么简单来说,我想在一个文件里面,同时输入中文和日本,就不行呀,因为他们编码不同,你设置成GBK,日本就乱码,设置成shift-JIS,中国汉字就乱码,所以就有了UNICODE(什么语言都支持)。java中的一个char,就是一个UNICODE编码。

       说了这么多其实都还没进入到计算机的底层,什么是计算机底层,就是你看到的‘中国人’三个字符,在计算机上到底是什么样子呢?说到这里,就说到了编码的关键.


       如图,也就是说不同的编码,在计算机底层的存储方式都是不同的,之所以出现这么多令人头疼的词,是因为人类语言的隔阂,我们作为程序员操作IO的时候,必须要了解这些东西,因为我们不管读取文件,写入文件,都是直接和编码打交道的。打一个最简单的比方,你和另一个哥们同时给一个心仪的女孩发送'我爱你'三个字,你用UFT-8编码就是9个字节,而他用ANSI就是6个字节,假如我们的网速是1 byte/min,那么人家的信息就能比你早3分钟到...最后的结果,你懂得,人家陪女朋友逛街去了,你就只能在CSDN上看我的博客。


ps:小tips,为什么UFT-8后面有个8,意思就是后面的8代表是以8位二进制为单位来传输符号的,因为unicode编码规定所有符号的二进制形式,都必须用2个字节,也就是16位来表示,那样的话,我们输入同样简单的符号,比ANSI就要多一倍的存储空间,在这样的情况下,UTF-8才诞生了.


参考文档:

https://www.cnblogs.com/web21/p/6092414.html

http://www.regexlab.com/zh/encoding.htm


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值