字符編碼/Java字符流與字節流/Buffer原理/對象序列化

字符編碼/Java字符流與字節流/Buffer原理/對象序列化

聲明

文章均爲本人技術筆記,轉載請註明出處https://segmentfault.com/u/yzwallhtml

字符編碼與編碼標準

字符集:收入標準中的符號集合成爲字符集segmentfault

編碼:將給定字符轉換成底層存儲字節的過程網絡

ASCII編碼

ASCII只支持英文編碼,不支持其餘語言;ASCII編碼使用一個字節編碼一個字符,一共規定了128個字符,每一個字符只佔用一個字節的後7位,第1位統一爲0分佈式

ANSI編碼

與ASCII編碼相對,非英語國家自定義適合本國語言的編碼標準,使用多個字節存儲一個字符。可是不一樣ANSI編碼之間互不兼容,沒法將不一樣語言的文字存儲在同一段用ANSI編碼的文本中;編碼

Unicode編碼

與ANSI編碼相對,國際組織制定Unicode編碼,爲不一樣語言中的每一個字符規定了統一併且惟一的數字編號,實現跨語言和跨平臺;spa

大端存儲與小端存儲

  • 大端存儲:高位字節存儲在低地址端,低位字節存儲在高地址端;(高放低,低放高).net

  • 小端存儲:低位字節存儲在低地址端,高位字節存儲在高地地端;(高放高,低放低)code

網絡傳輸和x86存儲均採用大端存儲;在Unicode規範中,根據文本文件的頭兩個字節,斷定採用大端存儲仍是小端存儲:orm

  • 頭兩個字節是FE FF:大端存儲;htm

  • 頭兩個字節是FF FE:小端存儲;

Unicode實現方式:UTF-8

一個字符的Unicode編碼是肯定的,可是在實際傳輸過程當中,有多種Unicode編碼實現方式。Unicode實現方式成爲Unicode轉換格式(Unicode Transformation Format, UTF);UTF-8是應用最廣的Unicode實現方式,使用1~4個字節存儲一個字符。Unicode其餘實現形式包括UTF-16(單個字符用2個或4個字節表示)和UTF-32(單個字符用4個字節表示)

UTF-8的編碼規則

  • 單字節字符:字節第一位爲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字節流與字符流

Java IO系統中,

字節流基類:InputStreamOutputStream

字符流基類:ReaderWriter

字節流I/O單位是單個字節,字符流I/O單位是是由JVM將單個字節解碼後的Unicode字符,Java中實際運行的只有字節流,只有對字符流進行解碼操做後才能獲得字符流。
Java中一個char類型採用Unicode編碼,大小佔兩個字節,能夠表示一箇中文字符;C/C++中char類型採用ASCII字符集,沒法表示一箇中文字符;

緩衝區Buffer實現原理

字節流本質上是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

相關文章
相關標籤/搜索