java字節(jié)字符轉(zhuǎn)換流操作詳解
本文實(shí)例講述了java字節(jié)字符轉(zhuǎn)換流操作。分享給大家供大家參考,具體如下:
一 基本概念
1、認(rèn)識(shí)文本和文本文件
java的文本(char)是16位無(wú)符號(hào),是字符的unicode編碼(雙字節(jié)編碼)
文件是byte byte byte 的數(shù)據(jù)序列
文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的存儲(chǔ)結(jié)果。
2、字符流(Reader Writer)---操作的都是文本文件
字符的處理:一次處理一個(gè)字符
字符的底層任然是基本的字節(jié)序列
3、字符流的基本實(shí)現(xiàn)
InputStreamReader完成byte流解析未char流,按照編碼解析
OutputStreamWriter 提供完成char流到byte流,按照編碼處理
4、UE編碼查看方法
UltraEdit-32的狀態(tài)欄可以顯示文件的編碼類型,詳細(xì)情況如下:

5、Myeclipse編碼查看方法
Project->Property->Resource
二 實(shí)例
package com.imooc.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IsrAndOswDemo {
public static void main(String[] args)throws IOException {
FileInputStream in = new FileInputStream("e:\\javaio\\test2.txt");
InputStreamReader isr = new InputStreamReader(in,"utf-8");//默認(rèn)項(xiàng)目的編碼,操作的時(shí)候,要寫文件本身的編碼格式
FileOutputStream out = new FileOutputStream("e:\\javaio\\test1.txt");
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
/*int c ;
while((c = isr.read())!=-1){
System.out.print((char)c);
}*/
char[] buffer = new char[8*1024];
int c;
/*批量讀取,放入buffer這個(gè)字符數(shù)組,從第0個(gè)位置開始放置,最多放buffer.length個(gè)
返回的是讀到的字符的個(gè)數(shù)
*/
while(( c = isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,c);
System.out.print(s);
osw.write(buffer,0,c);
osw.flush();
}
isr.close();
osw.close();
}
}
三 運(yùn)行結(jié)果
中國(guó)1jd
四 說明
用UE創(chuàng)建的utf-8和用myeclipse創(chuàng)建的utf-8,文件大小不一樣,該程序是用myeclipse創(chuàng)建的utf-8進(jìn)行測(cè)試的。
五 utf-8無(wú)bom和utf-8什么區(qū)別
utf-8+bom比utf-8多了三個(gè)字節(jié)前綴:0xEF0xBB0xBF,有這三個(gè)字節(jié)前綴的文本或字符串,程序可以自動(dòng)判斷它為utf-8格式,并按照utf-8格式來解析文本或字符串,否則,一個(gè)文本或者字符串在未知編碼的情況下,需要按照字符編碼規(guī)范去一個(gè)個(gè)驗(yàn)證
六 utf-8編碼說明
https://baike.baidu.com/item/UTF-8/481798?fr=aladdin
七 編碼實(shí)例
打開”記事本“程序Notepad.exe,新建一個(gè)文本文件,內(nèi)容就是一個(gè)”嚴(yán)“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8編碼方式保存。
然后,用文本編輯軟件UltraEdit中的”編輯-十六進(jìn)制函數(shù)“,觀察該文件的內(nèi)部編碼方式。
1)ANSI:文件的編碼就是兩個(gè)字節(jié)“D1 CF”,這正是“嚴(yán)”的GB2312編碼,這也暗示GB2312是采用大頭方式存儲(chǔ)的。
2)Unicode:編碼是四個(gè)字節(jié)“FF FE 25 4E”,其中“FF FE”表明是小頭方式存儲(chǔ),真正的編碼是4E25。
3)Unicode big endian:編碼是四個(gè)字節(jié)“FE FF 4E 25”,其中“FE FF”表明是大頭方式存儲(chǔ)。
4)UTF-8:編碼是六個(gè)字節(jié)“EF BB BF E4 B8 A5”,前三個(gè)字節(jié)“EF BB BF”表示這是UTF-8編碼,后三個(gè)“E4B8A5”就是“嚴(yán)”的具體編碼,它的存儲(chǔ)順序與編碼順序是一致的。
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java字符與字符串操作技巧總結(jié)》、《Java數(shù)組操作技巧總結(jié)》、《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》及《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Sublime Text 打開Java文檔中文亂碼的解決方案
這篇文章主要介紹了Sublime Text 中文亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12
java實(shí)現(xiàn)動(dòng)態(tài)代理方法淺析
這篇文章主要介紹了java實(shí)現(xiàn)動(dòng)態(tài)代理方法淺析,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
SpringBoot中使用Quartz設(shè)置定時(shí)任務(wù)的實(shí)例詳解
Quartz是OpenSymphony開源組織在任務(wù)調(diào)度領(lǐng)域的一個(gè)開源項(xiàng)目,完全基于 Java 實(shí)現(xiàn),本文小編給大家介紹了SpringBoot中如何使用Quartz設(shè)置定時(shí)任務(wù),文中通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
Java+mysql實(shí)現(xiàn)學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java+mysql實(shí)現(xiàn)學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
Java實(shí)現(xiàn)跨服務(wù)器上傳文件功能
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)跨服務(wù)器上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

