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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)

發(fā)布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)換流:

InputStreamReader?? 輸入字節(jié)流轉(zhuǎn)換成輸入字符流
OutputStreamWriter? 輸出字節(jié)流轉(zhuǎn)換成輸出字符流

總結(jié):就是字節(jié)流轉(zhuǎn)換成字符流,但是不能字節(jié)流轉(zhuǎn)換成字節(jié)流(聯(lián)想記憶----只有屌絲想變成高富帥,沒有高富帥想變成屌絲)

應用場景:
?? ?在以后開發(fā)中中我們免不了使用別人的工具,如果別人就是返回一個字節(jié)流,但是你想用字符流,這個時候我們就可以使用轉(zhuǎn)換流來把字節(jié)流轉(zhuǎn)換成字符流

下面是一些實例演示:

把字節(jié)流轉(zhuǎn)換成字符流,并實現(xiàn)讀寫

?

public class Demo3 {public static void main(String[] args) throws IOException {writeText();readText();}public static void readText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);//輸入字節(jié)流轉(zhuǎn)換成輸入字符流InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {System.out.println(new String(cs,0,length));}inputStreamReader.close();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);outputStreamWriter.write("你好,陌生人");outputStreamWriter.close();} }

?

?

?

?

字節(jié)流轉(zhuǎn)換成字符流后用字符流的緩存類實現(xiàn)讀寫

?

public class Demo4 {public static void main(String[] args) throws IOException {readText();writeText();}public static void readText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileOutputStream fileInputStream = new FileOutputStream(file);//輸出字節(jié)流轉(zhuǎn)換成輸入字符流OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileInputStream);//使用輸出字符流的緩存類BufferedWriter bufferedReader = new BufferedWriter(outputStreamWriter);//一行一行存bufferedReader.write("這是第一行數(shù)據(jù)");bufferedReader.newLine();bufferedReader.write("這是第二行數(shù)據(jù)");bufferedReader.close();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);//輸入字節(jié)流轉(zhuǎn)換成輸入字符流InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);//使用輸入字符流的緩存類BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line = null;//一行一行讀取文本while((line = bufferedReader.readLine())!=null) {System.out.println(line);}bufferedReader.close();} }

?

?

?

?

把字節(jié)流轉(zhuǎn)換成字符流并指定碼表進行讀寫數(shù)據(jù)

注意:記事本值存儲和我們從記事本獲取數(shù)據(jù)的都是碼值,并不是我們輸入時的字符,只不過我們在打開記事本的時候記事本自動給我們解碼了,也就是我們看的懂得字符,上面我們沒有指定碼表,實際上是讀寫時使用的是默認的編碼表gbk(java中默認碼表)

?

public class Demo5 {public static void main(String[] args) throws IOException {writeText();readText();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "iso8859-1");outputStreamWriter.write("你好!!!");outputStreamWriter.close();}public static void readText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"iso8859-1");char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {System.out.println(new String(cs,0,length));}inputStreamReader.close();} }

?

?

?

在這個之前我實驗四種碼表(iso8859-1 gbk utf-8 utf-16),發(fā)現(xiàn)除了用iso8859-1碼表寫入記事本,其他的碼表編碼,記事本都可以解碼成功(我們看的懂得文字),至于為什么我不知道可能跟我們系統(tǒng)有關(guān)(猜測),我們再來分析為什么會輸出這么個鬼東西出來

首先我在存入“你好!!!”的時候,我是使用的iso8859-1碼表編碼的,注意這里我們編譯的是中國文字,在iso8859-1碼表中是中國文字是沒有對應的碼值的,所以會出現(xiàn)亂碼,并且每一個字符都是一樣的(全是?),也就是對于不能識別的字符都是給的63這個碼值(下面例子可以知道),所以導致最后我們根據(jù)這個碼值進行解碼的時候控制臺全輸出的是?

在上一片中最后一個例子中,跟這個是不同的,那個例子中首先是使用gbk先進行編碼成對應的碼值,而這個碼值在iso8859-1碼表中都有對應的字符(iso8859-1碼表的特性),最后我們才可以獲取最早用gbk編碼的后的碼值后找到原來的字符,而這個是一開始就是用iso8859-1碼表進行的編碼,并且iso8859-1碼表對于不能識別的字符都是給的63這個碼值,這個是解碼不出最初的字符的(如果有大神知道可以私信我,謝謝)

?

public static void readText() throws IOException {File file = new File("D:\\新建文件夾\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"iso8859-1");char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {String str = new String(cs,0,length);byte[] buf = str.getBytes("iso8859-1");System.out.println(Arrays.toString(buf));}inputStreamReader.close();}

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zjdbk/p/9102387.html

總結(jié)

以上是生活随笔為你收集整理的75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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