課程
/后端開(kāi)發(fā)
/Java
/文件傳輸基礎(chǔ)——Java IO流
老師的代碼中只寫了字節(jié)的復(fù)制,為什么在文件中可以直接顯示字符串呢?
2017-01-04
源自:文件傳輸基礎(chǔ)——Java IO流 4-3
正在回答
還是數(shù)據(jù)編碼及存儲(chǔ)的原理還沒(méi)有搞清楚.^_^ 首先,我們用鍵盤寫文件時(shí),是以輸入碼進(jìn)行輸入的,比如拼音類的輸入法,或者是五筆字形輸入法,輸入之后,它會(huì)把你要輸入進(jìn)去的字符保存成機(jī)內(nèi)碼,也就是0 1所組成的機(jī)內(nèi)碼,因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)這種01 編碼的二進(jìn)制碼. 當(dāng)然對(duì)西方字符的話,相對(duì)字符少,最常用的ASCII編碼規(guī)則(8*16的矩陣),已經(jīng)可以涵蓋所有的西文字符. 而對(duì)于中文字符,就復(fù)雜些,因?yàn)楣鉂h字就有成千上萬(wàn)個(gè),所以又需要另外一套編碼規(guī)則,將所有這些中文字符涵蓋進(jìn)去,說(shuō)白了,就是給每一個(gè)漢字附一個(gè)唯一的二進(jìn)制碼.就像上學(xué)時(shí)的學(xué)號(hào),每一個(gè)人的學(xué)號(hào)是唯一的,而且這個(gè)學(xué)號(hào)是沒(méi)有太大意義的,它就像一個(gè)索引或者指針?biāo)频?指向它所代表的那個(gè)學(xué)生,同理,這里的每一個(gè)二進(jìn)制編碼也是一樣的道理. 以上這是向計(jì)算機(jī)輸入字符時(shí)由字符向二進(jìn)制的轉(zhuǎn)換過(guò)程;
輸出的過(guò)程,其實(shí)就是它的反向過(guò)程.你是按照哪個(gè)編碼規(guī)則輸入的,那么你讀取的時(shí)候也必須按相同的編碼規(guī)則去讀取,也即解碼過(guò)程. 還是上面說(shuō)的,你如果用另外一套編碼規(guī)則去解碼,那么相同的一個(gè)字節(jié)的編碼在另外一套編碼規(guī)則中所指向的很可能就是另外的一個(gè)字符了(除非這兩套編碼規(guī)則是兼容的).?
回到你的問(wèn)題:計(jì)算機(jī)顯示的時(shí)候其實(shí)已經(jīng)是默認(rèn)包含了這個(gè)解碼的過(guò)程.如果不解碼,那么我們看到的就是01所組成的二進(jìn)制串,是沒(méi)有辦法閱讀,修改的. 當(dāng)你面對(duì)著一屏幕的010101...時(shí),相信你內(nèi)心是崩潰的@_@. 而且,我們?cè)趯懳募r(shí),它是有一個(gè)默認(rèn)的編碼規(guī)則的,比如gbk,utf-8等,這個(gè)信息肯定是包含在文件中的.每個(gè)平臺(tái)都有默認(rèn)的編碼規(guī)則.
推薦: <大學(xué)計(jì)算機(jī)基礎(chǔ)>中的章節(jié)3: 數(shù)據(jù)在計(jì)算機(jī)中的表示. 非常基礎(chǔ)但是非常重要.^_^
qq_HelloWrold_03491955 提問(wèn)者
有你們前面的路好走的多。
補(bǔ)充:代碼所操作的只是文件在計(jì)算機(jī)中存儲(chǔ)的機(jī)內(nèi)碼(0&1)序列,也即字節(jié)序列.而查看時(shí),所用的軟件,記事本/寫字版等等,肯定都是帶有這種轉(zhuǎn)換功能的.
舉報(bào)
為您介紹IO流的使用,以及對(duì)象的序列化和反序列化的內(nèi)容
2 回答JAVA字符流為什么沒(méi)有把文件復(fù)制?
1 回答字符與字符串的輸入!
3 回答getBytes()方法是把字符串轉(zhuǎn)成二進(jìn)制嗎?
2 回答為什么這里將字符數(shù)組轉(zhuǎn)變成字符串不能用toString()方法?
2 回答字節(jié)流與字符流問(wèn)題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2017-01-04
還是數(shù)據(jù)編碼及存儲(chǔ)的原理還沒(méi)有搞清楚.^_^ 首先,我們用鍵盤寫文件時(shí),是以輸入碼進(jìn)行輸入的,比如拼音類的輸入法,或者是五筆字形輸入法,輸入之后,它會(huì)把你要輸入進(jìn)去的字符保存成機(jī)內(nèi)碼,也就是0 1所組成的機(jī)內(nèi)碼,因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)這種01 編碼的二進(jìn)制碼. 當(dāng)然對(duì)西方字符的話,相對(duì)字符少,最常用的ASCII編碼規(guī)則(8*16的矩陣),已經(jīng)可以涵蓋所有的西文字符. 而對(duì)于中文字符,就復(fù)雜些,因?yàn)楣鉂h字就有成千上萬(wàn)個(gè),所以又需要另外一套編碼規(guī)則,將所有這些中文字符涵蓋進(jìn)去,說(shuō)白了,就是給每一個(gè)漢字附一個(gè)唯一的二進(jìn)制碼.就像上學(xué)時(shí)的學(xué)號(hào),每一個(gè)人的學(xué)號(hào)是唯一的,而且這個(gè)學(xué)號(hào)是沒(méi)有太大意義的,它就像一個(gè)索引或者指針?biāo)频?指向它所代表的那個(gè)學(xué)生,同理,這里的每一個(gè)二進(jìn)制編碼也是一樣的道理. 以上這是向計(jì)算機(jī)輸入字符時(shí)由字符向二進(jìn)制的轉(zhuǎn)換過(guò)程;
輸出的過(guò)程,其實(shí)就是它的反向過(guò)程.你是按照哪個(gè)編碼規(guī)則輸入的,那么你讀取的時(shí)候也必須按相同的編碼規(guī)則去讀取,也即解碼過(guò)程. 還是上面說(shuō)的,你如果用另外一套編碼規(guī)則去解碼,那么相同的一個(gè)字節(jié)的編碼在另外一套編碼規(guī)則中所指向的很可能就是另外的一個(gè)字符了(除非這兩套編碼規(guī)則是兼容的).?
回到你的問(wèn)題:計(jì)算機(jī)顯示的時(shí)候其實(shí)已經(jīng)是默認(rèn)包含了這個(gè)解碼的過(guò)程.如果不解碼,那么我們看到的就是01所組成的二進(jìn)制串,是沒(méi)有辦法閱讀,修改的. 當(dāng)你面對(duì)著一屏幕的010101...時(shí),相信你內(nèi)心是崩潰的@_@. 而且,我們?cè)趯懳募r(shí),它是有一個(gè)默認(rèn)的編碼規(guī)則的,比如gbk,utf-8等,這個(gè)信息肯定是包含在文件中的.每個(gè)平臺(tái)都有默認(rèn)的編碼規(guī)則.
推薦: <大學(xué)計(jì)算機(jī)基礎(chǔ)>中的章節(jié)3: 數(shù)據(jù)在計(jì)算機(jī)中的表示. 非常基礎(chǔ)但是非常重要.^_^
2017-01-10
有你們前面的路好走的多。
2017-01-04
補(bǔ)充:代碼所操作的只是文件在計(jì)算機(jī)中存儲(chǔ)的機(jī)內(nèi)碼(0&1)序列,也即字節(jié)序列.而查看時(shí),所用的軟件,記事本/寫字版等等,肯定都是帶有這種轉(zhuǎn)換功能的.