InputStreamReader 和 OutputStreamWriter类使用方法简单介绍,及演示。
一、InputStreamReader類
InputStreamReader 將字節(jié)流轉(zhuǎn)換為字符流。是字節(jié)流通向字符流的橋梁。假設(shè)不指定字符集編碼,該解碼過(guò)程將使用平臺(tái)默認(rèn)的字符編碼,如:GBK。
構(gòu)造方法:
InputStreamReader isr = new InputStreamReader(InputStream in);//構(gòu)造一個(gè)默認(rèn)編碼集的InputStreamReader類
InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//構(gòu)造一個(gè)指定編碼集的InputStreamReader類。
參數(shù) in對(duì)象通過(guò) InputStream in = System.in;獲得。//讀取鍵盤上的數(shù)據(jù)。
????????????????????????????????或者? ? InputStream in = new FileInputStream(String fileName);//讀取文件里的數(shù)據(jù)。能夠看出FileInputStream 為InputStream的子類。
主要方法:int read();//讀取單個(gè)字符。
????????????????? int read(char []cbuf);//將讀取到的字符存到數(shù)組中。返回讀取的字符數(shù)。
public static void transReadNoBuf() throws IOException {/*** 沒(méi)有緩沖區(qū),僅僅能使用read()方法。*///讀取字節(jié)流 // InputStream in = System.in;//讀取鍵盤的輸入。InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件的數(shù)據(jù)。//將字節(jié)流向字符流的轉(zhuǎn)換。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,能夠提前從底層流讀取很多其它的字節(jié).InputStreamReader isr = new InputStreamReader(in);//讀取 // InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\demo.txt"));//綜合到一句。char []cha = new char[1024];int len = isr.read(cha);System.out.println(new String(cha,0,len));isr.close();}public static void transReadByBuf() throws IOException {/*** 使用緩沖區(qū) 能夠使用緩沖區(qū)對(duì)象的 read() 和 readLine()方法。*///讀取字節(jié)流 // InputStream in = System.in;//讀取鍵盤上的數(shù)據(jù)InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件上的數(shù)據(jù)。//將字節(jié)流向字符流的轉(zhuǎn)換。InputStreamReader isr = new InputStreamReader(in);//讀取//創(chuàng)建字符流緩沖區(qū)BufferedReader bufr = new BufferedReader(isr);//緩沖 // BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\demo.txt")));能夠綜合到一句。/* int ch =0;ch = bufr.read();System.out.println((char)ch);*/String line = null;while((line = bufr.readLine())!=null){System.out.println(line);}isr.close();}
?
二、OutputStreamWriter類
OutputStreamWriter 將字節(jié)流轉(zhuǎn)換為字符流。是字節(jié)流通向字符流的橋梁。假設(shè)不指定字符集編碼,該解碼過(guò)程將使用平臺(tái)默認(rèn)的字符編碼,如:GBK。
構(gòu)造方法:
OutputStreamWriter osw = new OutputStreamWriter(OutputStream out);//構(gòu)造一個(gè)默認(rèn)編碼集的OutputStreamWriter類
OutputStreamWriter?osw = new OutputStreamWriter(OutputStream out,String charsetName);//構(gòu)造一個(gè)指定編碼集的OutputStreamWriter類。
參數(shù) out對(duì)象通過(guò) InputStream?out = System.out;獲得。//打印到控制臺(tái)上。
?????????????????????????????? 或者? ? InputStream?out = new FileoutputStream(String fileName);//輸出到文件里。能夠看出FileoutputStream 為outputStream的子類。
主要方法:void write(int c);//將單個(gè)字符寫入。
??????????????????viod write(String str,int off,int len);//將字符串某部分寫入。
????????????????? void flush();//將該流中的緩沖數(shù)據(jù)刷到目的地中去。
?
public static void transWriteNoBuf() throws IOException {OutputStream out = System.out;//打印到控制臺(tái) // OutputStream out = new FileOutputStream("D:\\demo.txt");//打印到文件OutputStreamWriter osr = new OutputStreamWriter(out);//輸出 // OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream("D:\\demo.txt"));//兩句能夠綜合到一句。 // int ch = 97;//a // int ch = 20320;//你 // osr.write(ch);String str = "你好嗎?";//你好嗎?osr.write(str);osr.flush();osr.close();}public static void transWriteByBuf() throws IOException { // OutputStream out = System.out;//打印到控制臺(tái)。OutputStream out = new FileOutputStream("D:\\demo.txt");//打印到文件。OutputStreamWriter osr = new OutputStreamWriter(out);//輸出 // OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream("D:\\demo.txt"));//綜合到一句。BufferedWriter bufw = new BufferedWriter(osr);//緩沖 // int ch = 97;//a // int ch = 20320;//你 // osr.write(ch);String str = "你好嗎?\r\n我非常好!";//你好嗎?bufw.write(str);bufw.flush();bufw.close();}?流轉(zhuǎn)換程序1:
package IOtest;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter;public class TransStreamtest {/*** 基本的類: in1, InputStream* 創(chuàng)建對(duì)象 InputStream in = System.in;* in2, InputStreamReader 沒(méi)有readLine()方法* 主要方法:* read()讀取單個(gè)字符,一個(gè)漢字也為一個(gè)字符。* read(char[] cbuf)將字符讀入數(shù)組。* close().關(guān)閉此流和相關(guān)聯(lián)資源。* in3, BufferedReader 有read(),readLine()方法。* out1, OutputStream* 創(chuàng)建對(duì)象 OutputStream in = System.out;* out2, OutputStreamWriter * 主要方法:* write(int c)//寫入單個(gè)字符。* write(char[] cbuf,int off,int len)//寫入數(shù)組的某一部分* write(String str,int off,int len)//寫入字符串煩人某一部分。* flush();//刷新該流中的緩沖。* close();* out3, BufferedWriteer 有Write(int ch),newLine()方法。* * * @throws IOException */public static void main(String[] args) throws IOException { // transReadByBuf(); // transReadNoBuf();transWriteNoBuf(); // transWriteByBuf();}public static void transWriteNoBuf() throws IOException {OutputStream out = System.out;//打印到控制臺(tái) // OutputStream out = new FileOutputStream("D:\\demo.txt");//打印到文件OutputStreamWriter osr = new OutputStreamWriter(out);//輸出 // OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream("D:\\demo.txt"));//兩句能夠綜合到一句。 // int ch = 97;//a // int ch = 20320;//你 // osr.write(ch);String str = "你好嗎?";//你好嗎?osr.write(str);osr.flush();osr.close();}public static void transWriteByBuf() throws IOException { // OutputStream out = System.out;//打印到控制臺(tái)。OutputStream out = new FileOutputStream("D:\\demo.txt");//打印到文件。OutputStreamWriter osr = new OutputStreamWriter(out);//輸出 // OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream("D:\\demo.txt"));//綜合到一句。BufferedWriter bufw = new BufferedWriter(osr);//緩沖 // int ch = 97;//a // int ch = 20320;//你 // osr.write(ch);String str = "你好嗎?\r\n我非常好!";//你好嗎?bufw.write(str);bufw.flush();bufw.close();}public static void transReadNoBuf() throws IOException {/*** 沒(méi)有緩沖區(qū),僅僅能使用read()方法。*///讀取字節(jié)流 // InputStream in = System.in;//讀取鍵盤的輸入。InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件的數(shù)據(jù)。//將字節(jié)流向字符流的轉(zhuǎn)換。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,能夠提前從底層流讀取很多其它的字節(jié).InputStreamReader isr = new InputStreamReader(in);//讀取 // InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\demo.txt"));//綜合到一句。char []cha = new char[1024];int len = isr.read(cha);System.out.println(new String(cha,0,len));isr.close();}public static void transReadByBuf() throws IOException {/*** 使用緩沖區(qū) 能夠使用緩沖區(qū)對(duì)象的 read() 和 readLine()方法。*///讀取字節(jié)流 // InputStream in = System.in;//讀取鍵盤上的數(shù)據(jù)InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件上的數(shù)據(jù)。//將字節(jié)流向字符流的轉(zhuǎn)換。InputStreamReader isr = new InputStreamReader(in);//讀取//創(chuàng)建字符流緩沖區(qū)BufferedReader bufr = new BufferedReader(isr);//緩沖 // BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\demo.txt")));能夠綜合到一句。/* int ch =0;ch = bufr.read();System.out.println((char)ch);*/String line = null;while((line = bufr.readLine())!=null){System.out.println(line);}isr.close();} }?流轉(zhuǎn)換程序2:
package readKey;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter;public class TransStreamDemo3 {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException { // writeText_1(); // writeText_2(); // writeText_3(); // ReadTest_1(); // ReadTest_2(); // ReadTest_3();} public static void ReadTest_3() throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\utf-8.txt"),"UTF-8");char []ch = new char[20];int len = isr.read(ch);System.out.println(new String(ch,0,len) );isr.close(); }public static void ReadTest_2() throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\utf-8.txt"),"GBK");char []ch = new char[20];int len = isr.read(ch);System.out.println(new String(ch,0,len) );isr.close(); }public static void ReadTest_1() throws IOException {FileReader fr = new FileReader("D:\\demo.txt");char []ch = new char[20];int len = fr.read(ch);System.out.println(new String(ch,0,len) );fr.close(); }public static void writeText_3() throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\utf-8.txt"),"UTF-8");osw.write("你好嗎");osw.close(); }public static void writeText_2() throws IOException {FileWriter fw = new FileWriter("D:\\gbk1.txt");fw.write("你好啊");fw.close();}public static void writeText_1() throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\gbk.txt"),"GBK");/**和上面的等同 * FileWriter fw = new FileWriter("D:\\gbk1.txt");* 操作文件的字節(jié)流 + 默認(rèn)的編碼表*/osw.write("你好嗎");osw.close();} }
?
總結(jié)
以上是生活随笔為你收集整理的InputStreamReader 和 OutputStreamWriter类使用方法简单介绍,及演示。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 侧边菜单栏 android-menudr
- 下一篇: KVC/KVO实现原理分析