摘要:中一個類型采用編碼,大小占兩個字節(jié),可以表示一個中文字符中類型采用字符集,無法表示一個中文字符緩沖區(qū)實現(xiàn)原理字節(jié)流本質(zhì)上是直接與慢速存儲設備進行,速度較慢。從字節(jié)流中恢復一個對象,稱之為對象反序列化。
字符編碼/Java字符流與字節(jié)流/Buffer原理/對象序列化 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處https://segmentfault.com/u/yzwall
字符編碼與編碼標準ASCII編碼字符集:收入標準中的符號集合成為字符集
編碼:將給定字符轉(zhuǎn)換成底層存儲字節(jié)的過程
ASCII只支持英文編碼,不支持其他語言;ASCII編碼使用一個字節(jié)編碼一個字符,一共規(guī)定了128個字符,每個字符只占用一個字節(jié)的后7位,第1位統(tǒng)一為0,
ANSI編碼與ASCII編碼相對,非英語國家自定義適合本國語言的編碼標準,使用多個字節(jié)存儲一個字符。但是不同ANSI編碼之間互不兼容,無法將不同語言的文字存儲在同一段用ANSI編碼的文本中;
Unicode編碼與ANSI編碼相對,國際組織制定Unicode編碼,為不同語言中的每個字符規(guī)定了統(tǒng)一而且唯一的數(shù)字編號,實現(xiàn)跨語言和跨平臺;
大端存儲與小端存儲大端存儲:高位字節(jié)存儲在低地址端,低位字節(jié)存儲在高地址端;(高放低,低放高)
小端存儲:低位字節(jié)存儲在低地址端,高位字節(jié)存儲在高地地端;(高放高,低放低)
網(wǎng)絡傳輸和x86存儲均采用大端存儲;在Unicode規(guī)范中,根據(jù)文本文件的頭兩個字節(jié),判定采用大端存儲還是小端存儲:
頭兩個字節(jié)是FE FF:大端存儲;
頭兩個字節(jié)是FF FE:小端存儲;
Unicode實現(xiàn)方式:UTF-8一個字符的Unicode編碼是確定的,但是在實際傳輸過程中,有多種Unicode編碼實現(xiàn)方式。Unicode實現(xiàn)方式成為Unicode轉(zhuǎn)換格式(Unicode Transformation Format, UTF);UTF-8是應用最廣的Unicode實現(xiàn)方式,使用1~4個字節(jié)存儲一個字符。Unicode其他實現(xiàn)形式包括UTF-16(單個字符用2個或4個字節(jié)表示)和UTF-32(單個字符用4個字節(jié)表示)
UTF-8的編碼規(guī)則單字節(jié)字符:字節(jié)第一位為0,后7位為該字符的Unicode編碼。因此對于英文字符,UTF-8編碼與ASCII編碼相同;
多字節(jié)字符(n > 1):
第一個字節(jié)的前n位全為1,第n+1位設為0;
其余字節(jié)的前2位一律設為10;
其余二進制位全部為該字符的Unicode編碼;
漢字編碼漢字編碼主要有GBK,GB2312和Big5;
GB2312:GB2312由國家標準總局發(fā)布,是一個簡化版的漢子編碼規(guī)范,又稱國標碼。GB2312規(guī)定對任意一個字符采用2個字節(jié)存儲,每個字節(jié)采用7位編碼表示;
GBK:GBK是GB2312的擴展,兼容GB2312,每個漢字由2個字節(jié)存儲;
Big5:Big5是繁體字編碼,每個漢子由2個字節(jié)存儲;
Java字節(jié)流與字符流Java IO系統(tǒng)中,
字節(jié)流基類:InputStream和OutputStream
字符流基類:Reader和Writer
字節(jié)流I/O單位是單個字節(jié),字符流I/O單位是是由JVM將單個字節(jié)解碼后的Unicode字符,Java中實際運行的只有字節(jié)流,只有對字符流進行解碼操作后才能得到字符流。
Java中一個char類型采用Unicode編碼,大小占兩個字節(jié),可以表示一個中文字符;C/C++中char類型采用ASCII字符集,無法表示一個中文字符;
字節(jié)流本質(zhì)上是CPU直接與慢速存儲設備進行I/O,速度較慢。由于CPU與主存的I/O速度遠遠高于與慢速存儲設備,因此在內(nèi)存中開辟一段足夠大空間稱之為緩沖區(qū)(Buffer),系統(tǒng)每次嘗試先從緩沖區(qū)中讀取數(shù)據(jù),如果讀取失敗則選擇從后備存儲中讀取新數(shù)據(jù)放入緩沖區(qū)中,最后將緩沖區(qū)中對應數(shù)據(jù)返回給用戶。
對象序列化對象序列化與反序列化:將Java對象轉(zhuǎn)變成字節(jié)流存儲,稱之為對象序列化。從字節(jié)流中恢復一個Java對象,稱之為對象反序列化。
序列化資格:只有實現(xiàn)了Serializable接口的對象,才可以被序列化。
序列化實現(xiàn):通過ObjectOutputStream.writeObject(Object)將對象Object序列化;
反序列化實現(xiàn):通過ObjectInputStream.readObject()反序列化一個對象;
序列化應用:對象序列化多用于分布式網(wǎng)絡中通過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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67079.html
摘要:分類一按操作方式類結(jié)構(gòu)字節(jié)流和字符流字節(jié)流以字節(jié)為單位,每次次讀入或讀出是位數(shù)據(jù)。該對象并不是流體系中的一員,其封裝了字節(jié)流,同時還封裝了一個緩沖區(qū)字符數(shù)組,通過內(nèi)部的指針來操作字符數(shù)組中的數(shù)據(jù)。 分類一:按操作方式(類結(jié)構(gòu)) 字節(jié)流和字符流: 字節(jié)流:以字節(jié)為單位,每次次讀入或讀出是8位數(shù)據(jù)。可以讀任何類型數(shù)據(jù)。 字符流:以字符為單位,每次次讀入或讀出是16位數(shù)據(jù)。其只能讀取字符類...
摘要:方法的參數(shù)不但可以使相對于上下文根的路徑,而且可以是相對于當前的路徑。如和都是合法的路徑。 轉(zhuǎn)發(fā)與重定向區(qū)別是什么 在調(diào)用方法上 轉(zhuǎn)發(fā) 調(diào)用 HttpServletRequest 對象的方法 request.getRequestDispatcher(test.jsp).forward(req, resp); 重定向 調(diào)用 HttpServletResponse 對象的方法 res...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復習一塊可能會令初學者比較頭疼的內(nèi)容,起碼當時讓我很有些頭疼的內(nèi)容,那就是流。在這里壹哥會從兩部分展開介紹流,即與流。除此之外盡量使用字節(jié)流。關閉此輸入流并釋放與流相關聯(lián)的任何系統(tǒng)資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復習一塊可...
摘要:輸出流從指定的字節(jié)數(shù)組寫入個字節(jié),從偏移開始輸出到此輸出流將字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流。字符流輸入流將字符讀入數(shù)組的一部分。關閉流并釋放與之相關聯(lián)的任何系統(tǒng)資源。寫一個字符串的一部分。 IO流 1.流流動、流向 從一端移動到另一端 源頭與目的地,程序與文件|數(shù)組|網(wǎng)絡連接|數(shù)據(jù)庫,以程序為中心2.IO流分類流向 輸入流 輸出流 數(shù)據(jù) 字節(jié)流:二進制,可以是一切文件包括純文本...
摘要:基礎知識復習后端掘金的作用表示靜態(tài)修飾符,使用修飾的變量,在中分配內(nèi)存后一直存在,直到程序退出才釋放空間。將對象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對象稱之為反序列化。 Java 學習過程|完整思維導圖 - 后端 - 掘金JVM 1. 內(nèi)存模型( 內(nèi)存分為幾部分? 堆溢出、棧溢出原因及實例?線上如何排查?) 2. 類加載機制 3. 垃圾回收 Java基礎 什么是接口?什么是抽象...
閱讀 1517·2021-11-18 10:02
閱讀 1657·2021-09-04 16:40
閱讀 3171·2021-09-01 10:48
閱讀 874·2019-08-30 15:55
閱讀 1853·2019-08-30 15:55
閱讀 1365·2019-08-30 13:05
閱讀 3013·2019-08-30 12:52
閱讀 1624·2019-08-30 11:24