文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwallhtml
字符集:收入标准中的符号集合成为字符集segmentfault
编码:将给定字符转换成底层存储字节的过程网络
ASCII只支持英文编码,不支持其余语言;ASCII编码使用一个字节编码一个字符,一共规定了128
个字符,每一个字符只占用一个字节的后7
位,第1
位统一为0
,分布式
与ASCII编码相对,非英语国家自定义适合本国语言的编码标准,使用多个字节存储一个字符。可是不一样ANSI编码之间互不兼容,没法将不一样语言的文字存储在同一段用ANSI编码的文本中;编码
与ANSI编码相对,国际组织制定Unicode编码,为不一样语言中的每一个字符规定了统一并且惟一的数字编号,实现跨语言和跨平台;spa
大端存储:高位字节存储在低地址端,低位字节存储在高地址端;(高放低,低放高).net
小端存储:低位字节存储在低地址端,高位字节存储在高地地端;(高放高,低放低)code
网络传输和x86存储均采用大端存储;在Unicode规范中,根据文本文件的头两个字节,断定采用大端存储仍是小端存储:orm
头两个字节是FE FF
:大端存储;htm
头两个字节是FF FE
:小端存储;
一个字符的Unicode编码是肯定的,可是在实际传输过程当中,有多种Unicode编码实现方式。Unicode实现方式成为Unicode转换格式(Unicode Transformation Format, UTF);UTF-8是应用最广的Unicode实现方式,使用1~4
个字节存储一个字符。Unicode其余实现形式包括UTF-16(单个字符用2
个或4
个字节表示)和UTF-32(单个字符用4
个字节表示)
单字节字符:字节第一位为0
,后7
位为该字符的Unicode编码。所以对于英文字符,UTF-8编码与ASCII编码相同;
多字节字符(n > 1):
第一个字节的前n位全为1
,第n+1
位设为0
;
其他字节的前2
位一概设为10
;
其他二进制位所有为该字符的Unicode编码;
汉字编码主要有GBK,GB2312和Big5;
GB2312:GB2312由国家标准总局发布,是一个简化版的汉子编码规范,又称国标码。GB2312规定对任意一个字符采用2个字节存储,每一个字节采用7位编码表示;
GBK:GBK是GB2312的扩展,兼容GB2312,每一个汉字由2个字节存储;
Big5:Big5是繁体字编码,每一个汉子由2个字节存储;
Java IO系统中,
字节流基类:InputStream和OutputStream
字符流基类:Reader和Writer
字节流I/O单位是单个字节,字符流I/O单位是是由JVM将单个字节解码后的Unicode字符,Java中实际运行的只有字节流,只有对字符流进行解码操做后才能获得字符流。
Java中一个char类型采用Unicode编码,大小占两个字节,能够表示一个中文字符;C/C++中char类型采用ASCII字符集,没法表示一个中文字符;
字节流本质上是CPU直接与慢速存储设备进行I/O,速度较慢。因为CPU与主存的I/O速度远远高于与慢速存储设备,所以在内存中开辟一段足够大空间称之为缓冲区(Buffer),系统每次尝试先从缓冲区中读取数据,若是读取失败则选择从后备存储中读取新数据放入缓冲区中,最后将缓冲区中对应数据返回给用户。
对象序列化与反序列化:将Java对象转变成字节流存储,称之为对象序列化。从字节流中恢复一个Java对象,称之为对象反序列化。
序列化资格:只有实现了Serializable
接口的对象,才能够被序列化。
序列化实现:经过ObjectOutputStream.writeObject(Object)
将对象Object序列化;
反序列化实现:经过ObjectInputStream.readObject()
反序列化一个对象;
序列化应用:对象序列化多用于分布式网络中经过RMI传输对象;
[1] http://blog.csdn.net/sugar_z_/article/details/51276984
[2] http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html