面試必問的 Java 位元組流與字元流
點選上方“業餘草”,選擇“置頂公眾號”
第一時間獲取技術乾貨和業界資訊!
最近,我寫的都是一些基礎知識。一些人不屑於看,看了標題就私信我“能不能寫點高階的,看了這標題我就知道內容了,再這樣我就取關了!”
但是也有人表示喜歡看。“內容雖然基礎,但是看完後我有了新的認知!”
所以,我的尷尬的取關資料是時候給大家展示一下了。
最近 30 天的趨勢圖如下所示。
我要感謝一部分網友通過轉發、評論等形式對我的支援!謝謝你們!
好了,下面我們開始今天的內容。
位元組流和字元流其實很好理解!
位元組流就是 Byte 流,位元組就是 Byte。
字元流就是 Character 流,字元就是 Character。
這裡面有兩個單位換算大家需要記住一下。
-
1 byte = 8 bit
-
1 char = 2 byte = 16 bit
雖然 1 bit 才是資料真正的最小單位,但 1 bit 的資訊量太少了。要表示一個有用的資訊,需要好幾個 bit 一起表示。所以大多數情況下,位元組是資料最小的基本單位。
比如,我們熟知的基本型的大小都是 8 bit(也就是1位元組)的整數倍:
-
boolean: 1 byte
-
short: 2 byte
-
int: 4 byte
-
float: 4 byte
-
long: 8 byte
-
double: 8 byte
到這裡,我們認識的都是位元組。但是,Java I/O 的編碼系統提供的 Java IO 庫有兩個支系,面向位元組流的 InputStream 和 OutputStream;面向字元的 Reader 和 Writer。
為什麼要有字元流呢?那是因為英文,我們可以用位元組來表示,但是中文、日文、韓文等沒法用位元組來表示了,所有人們就想到了新的字元編碼集。比如,Unicode 字符集,GB 18030,GBK,Big5,ISO-8859-1 等。
所以,最終就是一個字元用 1 個、2 個或 4 個位元組組成。總而言之,一切都是位元組流,其實沒有字元流這個東西。字元只是根據編碼集對位元組流翻譯之後的產物。
所以,位元組流的 InputStream 和 OutputStream 才是一切的基礎。實際匯流排中流動的只有位元組流。需要對位元組流做特殊解碼才能得到字元流。Java 中負責從位元組流向字元流解碼的橋樑是InputStreamReader 和 InputStreamWriter。
看下面的 InputStreamReader 和 OutputStreamWriter 的結構圖。
實際負責編碼和解碼的是 StreamDecoder 類和 StreamEncoder 類。編碼過程中必須指定使用的字元編碼集 Charset。所以 InputStreamReader 和 OutputStreamWriter 的構造器都帶有 Charset 型別的引數。
如果沒有指定編碼集,將使用系統預設編碼集。而我們經常使用的 FileInputReader 和 FileOutputWriter 就是 InputStreamReader 和 OutputStreamWriter 的派生類。
到現在,你是不是想起了那句話。“世界上本來沒有路,走的人多了,也就變成了路。”
計算機中本沒有字元流,一開始只適用於英文,但是網際網路屬於全人類的,所以人們又搞出了字元流。字元只是包裝的位元組而已。
原文連結:淺談 Java 中的位元組流與字元流
10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!
你再主動一點點 我們就有故事了
相關文章
- java的IO操作:位元組流與字元流操作Java字元
- java入門(字元流、位元組流)Java字元
- Java的位元組流,字元流和緩衝流對比探究Java字元
- java位元組流和字元流的比較哦啊Java字元
- Java基礎(八)——IO流1_位元組流、字元流Java字元
- Java提高篇(二):IO位元組流、字元流和處理流Java字元
- 阿里Java學習路線:階段 1:Java語言基礎-Java語言高階特性:第16章:位元組流與字元流:課時77:位元組流與字元流的區別阿里Java字元
- JavaIO流(一)-位元組輸入流與字元輸入流JavaAI字元
- java處理流 和節點流(在位元組流和字元流中,又分為處理流和節點流)Java字元
- Java位元組流和字元流,是時候總結一下IO流了Java字元
- 傳智黑馬java基礎學習——day23(位元組流、字元流)Java字元
- 位元組流
- Java IO3:位元組流Java
- IO流下:位元組流、流操作規律(java基礎)Java
- 面試官:位元組流可以處理一切檔案為什麼還需要字元流呢?面試字元
- 129.(位元組流、字元流)對檔案進行讀寫操作字元
- 面試必問題:JS防抖與節流面試JS
- JS 位元組流 解析JS
- 位元組陣列流陣列
- Java緩衝輸出位元組流BufferedOutputStreamJava
- 流暢的 Python – 3. 文字與位元組Python
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- Java-字元流Java字元
- java 位元組流檔案複製方法總結Java
- [java]利用IO流中的位元組流和緩衝流寫一個複製資料夾的小程式Java
- Java位元組流檔案複製及效率比較Java
- Java IO流字元流簡介及基本使用Java字元
- Java IO: 其他字元流(下)Java字元
- Java 基礎(九)字元流Java字元
- Java IO5:字元流Java字元
- 位元組流轉16進位制字串字串
- 網路通訊1:位元組流的封裝封裝
- C# 返回圖片的位元組流byte[]C#
- 如何把檔案輸出流替換成位元組輸出流
- Java 字元流檔案讀寫Java字元
- java學習日記-字元流Java字元
- 字元型別的字元儲存與位元組儲存字元型別
- IO 字元流字元