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