日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java转换流

發(fā)布時(shí)間:2025/3/12 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java转换流 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一般情況下,字節(jié)流可以對所有的數(shù)據(jù)進(jìn)行操作,但是有些時(shí)候在處理一些文本時(shí)我們要用到字符流,比如,查看文本的中文時(shí)就是需要采用字符流更為方便。所以 Java IO 流中提供了兩種用于將字節(jié)流轉(zhuǎn)換為字符流的轉(zhuǎn)換流。

InputStreamReader 用于將字節(jié)輸入流轉(zhuǎn)換為字符輸入流,其中 OutputStreamWriter 用于將字節(jié)輸出流轉(zhuǎn)換為字符輸出流。使用轉(zhuǎn)換流可以在一定程度上避免亂碼,還可以指定輸入輸出所使用的字符集。

在 java.txt 中輸出“百度搜索引擎”這 6 個(gè)字,將 java.txt 保存為“UTF-8”的格式,然后通過字節(jié)流的方式讀取,代碼如下:

public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("D://java.txt");int b = 0;while ((b = fis.read()) != -1) {System.out.print((char) b);}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }

輸出結(jié)果為 ???,我們發(fā)現(xiàn)中文都是亂碼。下面用字節(jié)數(shù)組,并通過字符串設(shè)定編碼格式來顯式內(nèi)容,代碼如下:

public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("D://java.txt");byte b[] = new byte[1024];int len = 0;while ((len = fis.read(b)) != -1) {System.out.print(new String(b, 0, len, "UTF-8"));}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }

這時(shí)輸出結(jié)果為百度搜索引擎,但是當(dāng)存儲(chǔ)的文字較多時(shí),會(huì)出現(xiàn)解碼不正確的問題,且字節(jié)長度無法根據(jù)解碼內(nèi)容自動(dòng)設(shè)定,此時(shí)就需要轉(zhuǎn)換流來完成。代碼如下:

public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("D://java.txt");InputStreamReader isr = new InputStreamReader(fis, "UTF-8");int b = 0;while ((b = isr.read()) != -1) {System.out.print((char) b); // 輸出結(jié)果為“百度搜索引擎”}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }

以獲取鍵盤輸入為例來介紹轉(zhuǎn)換流的用法。Java 使用 System.in 代表標(biāo)準(zhǔn)輸出,即鍵盤輸入,但這個(gè)標(biāo)準(zhǔn)輸入流是 InputStream 類的實(shí)例,使用不太方便,而且鍵盤輸入內(nèi)容都是文本內(nèi)容,所以可以使用 InputStreamReader 將其轉(zhuǎn)換成字符輸入流,普通的 Reader 讀取輸入內(nèi)容時(shí)依然不太方便,可以將普通的 Reader 再次包裝成 BufferedReader,利用 BufferedReader 的 readLine() 方法可以一次讀取一行內(nèi)容。程序如下所示。

public static void main(String[] args) {try {// 將 System.in 對象轉(zhuǎn)換成 Reader 對象InputStreamReader reader = new InputStreamReader(System.in);// 將普通的Reader 包裝成 BufferedReaderBufferedReader br = new BufferedReader(reader);String line = null;// 利用循環(huán)方式來逐行的讀取while ((line = br.readLine()) != null) {// 如果讀取的字符串為“exit”,則程序退出if (line.equals("exit")) {System.exit(1);}// 打印讀取的內(nèi)容System.out.println("輸入內(nèi)容為:" + line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }

上面代碼第 4 行和第 6 行將 System.in 包裝成 BufferedReader,BufferReader 流具有緩沖功能,它可以一次讀取一行文本,以換行符為標(biāo)志,如果它沒有讀到換行符,則程序堵塞,等到讀到換行符為止。運(yùn)行上面程序可以發(fā)現(xiàn)這個(gè)特征,在控制臺(tái)執(zhí)行輸入時(shí),只有按下回車鍵,程序才會(huì)打印出剛剛輸入的內(nèi)容。

由于 BufferedReader 具有一個(gè) readLine() 方法,可以非常方便地進(jìn)行一次讀入一行內(nèi)容,所以經(jīng)常把讀入文本內(nèi)容地輸入流包裝成 BufferedReader,用來方便地讀取輸入流的文本內(nèi)容。

總結(jié)

以上是生活随笔為你收集整理的Java转换流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。