日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談java中字節與字符的區別

瀏覽:27日期:2022-08-28 15:20:44

最近在看Java中的IO相關知識,發現對字節和字符的理解還不夠。寫篇總結記錄一下。

一、字節

所謂字節(Byte),是計算機數據存儲的一種計量單位。一個二進制位稱為比特(bit),8個比特組成一個字節,也就是說一個字節可以用于區分256個整數(0~255)。由此我們可以知道,字節本是面向計算機數據存儲及傳輸的基本單位,后續的字符也就是以字節為單位存儲的,不同編碼的字符占用的字節數不同。

那么在Java中,除了存儲的意義外,Java還將字節Byte作為一種基本數據類型,該數據類型在內存中占用一個字節,用于(-128~127)范圍內的整數

byte a = -128;byte b = 127;

總的來說,字節在Java中有兩種含義:

存儲的單位Java的數據類型,用于表示-128~127范圍的整數

二、字符

計算機底層存儲的是字節,字符的設計則是用于展示符號。屏幕上顯示的各種文字,數字,符號等就是解碼的字符。所以我們說字符是用來顯示的符號,它將存儲的字節轉換成人們看得懂的符號,因此字符的核心就是定義字節與展示符號之間的關系,這種映射關系通常也叫做編碼。

2.1、編碼的由來

為什么要編碼呢?前面我們知道數據都是以字節為單位存儲在計算機中,字節可以區分256個整數,最容易想到的就是將這256個整數定義為256種狀態并分別對應256個字符。但是人類符號太多了,256種是不夠的。所以人們想到將多個字節合并起來表示人類語言符號,編碼的問題就轉化成了字節的組合問題。

2.2、編碼的常見格式

如今有很多編碼格式,常見的如ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等等。

ASCII編碼是最基礎的編碼格式,標準的ASCII碼一共有128個,占用字節的低7位,將英語系語種的符號都能覆蓋住,但是總的來說能表示的字符還是非常有限。

ISO-8859-1編碼是ASCII編碼的一種擴展,它用了字節的8位,能表示256種字符,且向下兼容ASCII,包含了絕大多數的西歐符號。

GB2312是雙字節編碼,意味著它使用兩個字節來表示符號,包含有6763個漢字。

GBK是GB2312的一個擴展,也是雙字節編碼,能夠表示21003個漢字,且向下兼容GB2312。

...

編碼的規范越來越多,不同語言的國家都定義了自己的語言符號編碼標準,一時間編碼標準百花齊放,在互聯網的時代里交流十分不便,不同編碼體系之間的信息交流都需要采用不同的解碼方案,不然就會出現亂碼的現象。于是國際標準化組織ISO制定了一個能夠容納世界上所有文字和符號的字符編碼方案Unicode。Unicode是一個字符集,它規定了人類所有字符對應的二進制數,至于這個二進制數怎么存儲則是由開發者來進行實現。其中比較流行的實現是UTF-8和UTF-16,還有一種UTF-32。

UTF-32編碼使用4個字節,也就是32位二進制存儲Unicode字符,效率高但是空間浪費。

UTF-8編碼是一種變長的編碼方式,它使用1~6個字節來存儲,對于英語系的字符使用一個字節,向下兼容ASCII,對于漢字則使用兩個字節,依次類推,這樣就能夠節省一定的空間。

UTF-16編碼是介于兩者之間的一種編碼方式。對于部分字符采用2個字節,另一部分字符采用4個字節。因此UTF-16無法兼容ASCII。

在平時的使用中,UTF-8的使用還是比較多,就是由于它既能向下兼容ASCII,還能夠在一定程度上節省空間。

2.3、Java IO流中的編碼和解碼

Java中是如何進行編碼和解碼的呢?我們知道,編碼/解碼的過程主要是發生在字符與字節之間轉換的過程。在展示字符的時候,我們將內存中的字節解碼成符號,在存儲或者傳輸文件時,我們將字符編碼位字節數據。解碼

解碼的過程是將字節轉換為字符,也就是我們在讀取文件或者網絡數據的過程。

在java中,我們通過FileReader讀取文件數據,FileReader繼承自InputStreamReader。在InputStreamReader中使用了解碼器StreamDecoder。

// InputStreamReader.javaimport java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import sun.nio.cs.StreamDecoder;public class InputStreamReader extends Reader {// 解碼器,按照指定編碼方式將字節轉換成字符 private final StreamDecoder sd;// 通過dec指定解碼器使用的編碼方案 public InputStreamReader(InputStream in, CharsetDecoder dec){ super(in); if (dec == null) throw new NullPointerException('charset decoder'); sd = StreamDecoder.forInputStreamReader(in, this, dec); }// 讀字符,以int形式(4字節)返回字符 public int read() throws IOException { return sd.read(); }}

通過上述InputStreamReader源碼我們可以知道:

讀取輸入流時,通過StreamDecoder完成字節到字符的轉換可以通過構造方法來設置編碼方案讀取的字符以int型數據返回,即4個字節

另外,上述列舉只是源碼的一部分,我們設置編碼方案有很多種形式,如在構造方法種傳入編碼方式的String類型名稱、傳入CharSet類型的字符集以及上述的CharsetDecoder類型的字符解碼方式。如果不傳入編碼方案,則默認為當前環境的編碼方案。編碼

與解碼類似,在存儲文件或者寫入數據的時候,我們將字符轉換為字節,寫入文件或者網絡。

在java種,我們通過FileWriter來寫入文件,FileWriter繼承自OutputStreamWriter。在OutputStreamWriter種使用了編碼器StreamEncoder。

// OutputStreamWriter.javaimport java.nio.charset.Charset;import java.nio.charset.CharsetEncoder;import sun.nio.cs.StreamEncoder;public class OutputStreamWriter extends Writer { // 編碼器,按照指定編碼方式將字符轉換成字節 private final StreamEncoder se; // 通過enc指定編碼方案 public OutputStreamWriter(OutputStream out, CharsetEncoder enc) { super(out); if (enc == null) throw new NullPointerException('charset encoder'); se = StreamEncoder.forOutputStreamWriter(out, this, enc); } // 寫字符,寫入的字符以int類型傳入 public void write(int c) throws IOException { se.write(c); }

通過源碼我們可以知道:

寫入輸出流時,通過StreamEncoder完成字符到字節的轉換 通過構造方法指定編碼方案 寫入的字符都是int類型

到此這篇關于淺談java中字節與字符的區別的文章就介紹到這了,更多相關java 字節與字符 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
电影91久久久| 久久不卡国产精品一区二区| 麻豆精品久久久| 国产福利91精品一区二区| 99视频一区| 四虎884aa成人精品最新| 久久免费国产| 国产欧美啪啪| 麻豆精品蜜桃视频网站| 91精品国产乱码久久久久久久| 日本高清久久| 韩国一区二区三区视频| 91亚洲国产高清| sm捆绑调教国产免费网站在线观看| 久久女人天堂| 日本欧美在线看| 岛国av在线网站| 免费在线观看一区| 一区二区精品伦理...| 日本色综合中文字幕| 狠狠干综合网| 亚洲在线观看| 都市激情国产精品| 91精品久久久久久久久久不卡| 国产精品国产一区| 国产精品一区三区在线观看| 欧美精品影院| 国产三级一区| 亚洲综合丁香| 蜜臀av亚洲一区中文字幕| 久久亚洲风情| 亚洲国产不卡| 久久成人亚洲| 91精品国产一区二区在线观看| 国产日韩一区| 日韩一级网站| 国产欧美在线| 国产精品jk白丝蜜臀av小说| 国产成人精品一区二区三区视频 | 日韩亚洲一区在线| 国产69精品久久| 婷婷视频一区二区三区| 日韩二区三区在线观看| 日韩国产精品久久久久久亚洲| 亚洲欧美日韩国产综合精品二区| 天堂网av成人| 日韩精品乱码av一区二区| 日韩一区二区久久| 国产v日韩v欧美v| 国产欧美一区| 特黄毛片在线观看| 国产色播av在线| 成人羞羞在线观看网站| 久久国产三级| 天海翼精品一区二区三区| 国产色99精品9i| 一区二区电影在线观看| 福利一区二区三区视频在线观看| 亚洲一区有码| 精品中文在线| 鲁大师影院一区二区三区| 亚洲精品影视| 日韩精品永久网址| 亚洲视频二区| 日韩视频在线一区二区三区 | 中文字幕在线官网| 国产精品第一| 日本亚州欧洲精品不卡| 玖玖精品视频| 午夜国产欧美理论在线播放 | 欧美日韩国产一区二区三区不卡| 红桃视频国产精品| 精品一区二区三区的国产在线观看| 美腿丝袜在线亚洲一区| 国产日韩亚洲| 久久国产高清| 国产精品嫩模av在线| 福利一区和二区| 日产精品一区二区| 国产精品porn| 成人亚洲一区| 伊人久久成人| 色综合视频一区二区三区日韩 | 久久精品免费一区二区三区| 大香伊人久久精品一区二区| 午夜精品网站| 日韩精品第一| 精品深夜福利视频| 日韩精品免费一区二区三区| 老司机免费视频一区二区| 精品无人区麻豆乱码久久久| 精品国内亚洲2022精品成人| 精品国产aⅴ| 久久久男人天堂| 中文字幕人成乱码在线观看| 国产精品sm| 国产精品22p| 蜜桃av一区二区在线观看| 国产伊人久久| 伊人成人在线视频| 久久男人av资源站| 亚洲成人二区| 中日韩男男gay无套| 天堂av一区| 三级欧美在线一区| www在线观看黄色| 综合亚洲色图| 日本少妇一区| 日韩欧美另类中文字幕| 91视频久久| 国产探花一区| 国产精品第一国产精品| 久久精品伊人| 欧美激情五月| 亚洲精品伊人| 精品久久中文| 欧美午夜三级| 中文字幕中文字幕精品| 激情婷婷欧美| 国产成人免费| 中文精品电影| 欧美精选一区二区三区| 日韩一区电影| 国产精品一区二区三区美女| 日本不卡在线视频| 蜜臀av一区二区在线免费观看| 午夜性色一区二区三区免费视频| 日韩一区二区三区在线免费观看| 欧美激情麻豆| 五月国产精品| 国产精品99免费看| а√在线中文在线新版| 国产黄大片在线观看| 国产精品久久久久av蜜臀| 午夜欧美理论片| 久久久天天操| 精品女同一区二区三区在线观看| 亚洲电影在线| 久久免费精品| 国产成人精品三级高清久久91| 亚洲欧美久久| 亚洲成人精品| 性欧美69xoxoxoxo| 国产综合亚洲精品一区二| 欧美成人高清| 综合激情一区| 欧美在线看片| 91超碰国产精品| 亚洲少妇自拍| 怡红院精品视频在线观看极品| 日韩欧美一区二区三区在线视频 | 国产精品草草| 91亚洲国产| 亚洲精品小说| 日韩福利视频一区| 麻豆久久久久久久| 日韩精品a在线观看91| 国产精品乱战久久久| 福利一区和二区| 红杏一区二区三区| 亚洲成人不卡| 亚洲欧美日本国产| 国产精品日韩精品中文字幕| 欧美日韩视频网站| 日韩高清一区二区| av高清不卡| 日韩精品亚洲专区在线观看| 国产欧美日韩一区二区三区在线| 精品国产乱码| 亚洲在线久久| 日韩另类视频| 欧美日韩精品免费观看视频完整| 日韩av资源网| 亚洲一区二区三区免费在线观看| 国产精品一区二区精品| 激情欧美一区| 国产中文字幕一区二区三区| 中文亚洲欧美| 国产videos久久| 一区二区电影| 99国产精品久久久久久久成人热| 欧美精品97| 日韩一二三区在线观看| 美女福利一区二区三区| 日韩精品久久久久久| 亚洲国产专区| 精品一区二区三区中文字幕 | 精品中文字幕一区二区三区四区| 亚洲国产福利| 欧美在线亚洲| 亚洲韩日在线| 国产+成+人+亚洲欧洲在线| 不卡在线一区二区| 色偷偷色偷偷色偷偷在线视频| 日韩精品乱码av一区二区| 亚洲综合另类| 国产亚洲观看| 久久av在线| 中文字幕日韩亚洲| 日本在线观看不卡视频|