java中的位元組流和字元流的儲存區別

來源:互聯網
上載者:User

 java中的位元組流和字元流的儲存區別,用幾個常用類型的資料來比較位元組流和字元流的區別
int a=5;
boolean b=true;
char c='G';
String d="你好";
 
使用字元流列印以上類型的資料到檔案中:
PrintWriter dos =new PrintWriter(new BufferedWriter(new FileWriter("c://buffertest.txt")));
dos.print(a);
dos.print(b);
dos.print(c);
dos.print(d);
 
結果如下:
a是5
b是true
c是G
d是你好
字元流完全保證了和我們輸入的字元保持一致
 
再看看位元組流
DataOutputStream dos =new DataOutputStream(new FileOutputStream("c://streamtest.txt"));
dos.writeInt(a);
dos.writeBoolean(b);
dos.writeChar(c);
dos.writeUTF(d);
dos.writeChars(d);
dos.writeBytes(d);
 
結果是二進位檔案,我們用十六進位編輯器開啟它
a是00 00 00 05,int是四個位元組
b是01,布爾型變數是一個位元組
c是00 47,char是兩個位元組
d分別用3個不同的函數列印在檔案中
第一個是00 06 E4 BD A0 E5 A5 BD,前面的00 06是writeUTF加上去的,是位元組的數目,後面六個位元組是"你好"的UTF編碼,每個漢字3個位元組
第二個是4F 60 59 7D,這是"你好"的big endian的Unicode編碼,每個漢字2個位元組
第三個是60 7D,這是從4F 60 59 7D中分別取得兩個漢字的低位元組
 
進一步說明
用記事本儲存不同的編碼檔案,檔案的頭部會有一些標記來識別檔案的編碼類別型,用記事本的另存新檔就可以儲存不同編碼類別型的檔案,然後用記事本開啟時就可以正確識別編碼,如果用十六進位編輯器開啟它們就會看到用來識別編碼類別型的標記被寫在檔案頭部,這些類型說明如下:
EF BB BF UTF-8
FF FE UTF-16/UCS-2, little endian
FE FF UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
 
UTF-8儲存一個字元時,長度為1-3個位元組,也就是8bit-24bit。
其中code<= 007F的,儲存為1個位元組
(code >= 0080) && (code <= 0x07FF)的,儲存為2個位元組
code>0800的,儲存為3個位元組

"你好"的gb2312編碼是C4 E3 BA C3,漢字大於0800,所以每個漢字儲存為3個位元組
 
little endian:低地址存放位元組低位,x86是這種順序
big endian:低地址存放位元組高位,網路位元組序是這種順序

本文來自: IT知道網(http://www.itwis.com) 詳細出處參考:http://www.itwis.com/html/java/j2se/20080428/1367.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.