国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java學(xué)習(xí)筆記之轉(zhuǎn)換流

2019-11-06 07:38:24
字體:
供稿:網(wǎng)友

最近在學(xué)習(xí)java中的字節(jié)流和字符流,而又有轉(zhuǎn)換流,為什么還要有轉(zhuǎn)換流呢?首先先來看一下字節(jié)流和字符流。

字節(jié)流:

              讀取操作: InputStream(子類FileInputStream)------read()

                                          可用BufferedInputStream提高效率(緩沖字節(jié)流)

              寫入操作:OutputStream(子類FileOutputStream)---write()

                     可用BufferedOutputStream提高效率(緩沖字節(jié)流)

字符流:

              讀取操作:Reader(InputStreamReader、FileReader)--------read()

可用BufferedReader提高效率(緩沖字節(jié)流)

              寫入操作:Writer(OutputStreamWriter、FileWriter)---------write()

可用BufferedWriter提高效率(緩沖字節(jié)流)

正常情況下,我們用字節(jié)流可以對所有的數(shù)據(jù)進(jìn)行操作,但是有些時(shí)候我們在處理一些文本時(shí)我們要用到字符流,比如,查看文本中的中文時(shí)就是需要采用字符流,更為方便。如,在記事本中輸入“中國”兩個(gè)漢字,存儲格式為“UTF-8”,通過字節(jié)流方式讀取,讀到的內(nèi)容我們看不懂。

由此看出,通過字節(jié)流很難得到我們能看的懂得文本內(nèi)容,換句話說也就是很難正確解碼。

我們用字節(jié)數(shù)組,并通過字符串設(shè)定編碼格式來顯示內(nèi)容,此時(shí)得到的使我們能看得懂的內(nèi)容,但是a.txt中的內(nèi)容較少,當(dāng)較多時(shí),而在1024的整倍數(shù)處又會出現(xiàn)解碼不正確的問題,字節(jié)數(shù)組長度無法根據(jù)解碼內(nèi)容自動設(shè)定,此時(shí)就需要轉(zhuǎn)換流來完成解碼任務(wù)。

所謂的解碼,實(shí)際上就是將我們看不懂的數(shù)據(jù)格式(按照一定的規(guī)則,編碼表)轉(zhuǎn)換成我們能夠看得懂的內(nèi)容,即,二進(jìn)制數(shù)據(jù)------字符;對應(yīng)的編碼就是將看得懂的轉(zhuǎn)換成看不懂的,字符-----二進(jìn)制數(shù)據(jù)。

所以,字符流 = 字節(jié)流 + 編碼表

下面的是一些常見的編碼表的介紹:

計(jì)算機(jī)只能識別二進(jìn)制數(shù)據(jù),早期由來是電信號。為了方便應(yīng)用計(jì)算機(jī),讓它可以識別各個(gè)國家的文字。就將各個(gè)國家的文字用數(shù)字來表示,并一一對應(yīng),形成一張表。

ASCII:美國標(biāo)準(zhǔn)信息交換碼。

用一個(gè)字節(jié)的7位可以表示。

ISO8859-1:拉丁碼表。歐洲碼表

用一個(gè)字節(jié)的8位表示。

GB2312:中國的中文編碼表。

GBK:中國的中文編碼表升級,融合了更多的中文文字符號。

GB18030:GBK的取代版本

BIG-5碼:通行于臺灣、香港地區(qū)的一個(gè)繁體字編碼方案,俗稱“大五碼”。

Unicode:國際標(biāo)準(zhǔn)碼,融合了多種文字。

所有文字都用兩個(gè)字節(jié)來表示,Java語言使用的就是unicode

UTF-8:最多用三個(gè)字節(jié)來表示一個(gè)字符。

UTF-8不同,它定義了一種“區(qū)間規(guī)則”,這種規(guī)則可以和ASCII編碼保持最大程度的兼容:

它將Unicode編碼為00000000-0000007F的字符,用單個(gè)字節(jié)來表示它將Unicode編碼為00000080-000007FF的字符用兩個(gè)字節(jié)表示 它將Unicode編碼為00000800-0000FFFF的字符用3字節(jié)表示 

轉(zhuǎn)換流中,InputStreamReader和OutputStreamWriter是字節(jié)流和字符流轉(zhuǎn)換的橋梁,那什么時(shí)候使用呢 ?

1.當(dāng)字節(jié)和符之間有轉(zhuǎn)換動作時(shí) 2。流操作的數(shù)據(jù)需要進(jìn)行編碼表指定時(shí)。

以讀取操作為例:采用轉(zhuǎn)換流在此讀取上面的文本InputStreamReader(InputStream is):用默認(rèn)的編碼讀取數(shù)據(jù);InputStreamReader(InputStream is,StringcharsetName):用指定的編碼讀取數(shù)據(jù)

咦,采用了轉(zhuǎn)換流讀取了,怎么還是看不懂?InputStreamReader(InputStream is):用默認(rèn)的編碼讀取數(shù)據(jù);在Eclipse下,默認(rèn)的編碼格式是系統(tǒng)系統(tǒng)的編碼格式:GBK,并沒有對應(yīng)上a.txt所采用的編碼格式;需要手動指定編碼格式InputStreamReader(InputStream is,String charsetName):用指定的編碼讀取數(shù)據(jù)

這次就正確了,當(dāng)然讀取的方式還有其他的read方法,可以參照J(rèn)Dk查看,還有寫入數(shù)據(jù)時(shí)的編碼

OutputStreamWriter(OutputStream os):默認(rèn)編碼寫數(shù)據(jù),GBK

OutputStreamWriter(OutputStream os,StringcharsetName):指定編碼寫數(shù)據(jù)

要想不出現(xiàn)編碼與解碼的問題,就要保證編碼時(shí)和解碼時(shí)采用相同的編碼表,而對于一般的本地操作常用的是FileWriter和FilewReader兩個(gè)類,操作更為方便,采用默認(rèn)的編碼表,,一旦需要自己設(shè)定編碼格式,就需要采用InputStreamReader,OutputStreamWriter。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴化市| 柳江县| 诸暨市| 南宫市| 洞口县| 南漳县| 逊克县| 陇南市| 图木舒克市| 大竹县| 繁昌县| 石渠县| 若羌县| 三原县| 博乐市| 汉寿县| 闻喜县| 永胜县| 洛隆县| 孙吴县| 岑溪市| 平塘县| 改则县| 重庆市| 托克托县| 和政县| 江阴市| 威远县| 峨边| 游戏| 赤城县| 浮山县| 湘阴县| 前郭尔| 新营市| 太白县| 汤原县| 鄱阳县| 康定县| 汤原县| 安庆市|