InputStreamReader和OutputStreamWriter转换流

 InputStreamReader(读取)、OutputStreamWriter(写入)

他们是字节流通向字符流的桥梁,它使用指定的 charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或者显示给定,否则可能接受平台默认的字符集。

主要用于字节流到字符流的转换,以及以指定编码读取和写入数据。注意当没有指定编码时,会使用开发平台的默认编码

主要方法:

1.构造方法 

InputStreamReader(InputStream in):创建一个使用默认字符集的 InputStreamReader。

InputStreamReader(InputStream in,Charset cs):创建使用给定字符集的 InputStreamReader。也可以使用String charsetName参数代替Charset cs

OutputStreamWriter(OutputStream out):创建使用默认字符编码的 OutputStreamWriter。

OutputStreamWriter(OutputStream out,Charset cs):创建使用给定字符集的 OutputStreamWriter。也可以使用String charsetName替换Charset cs

2.其他方法

String getEncoding() 返回此流使用的字符编码的名称。

int read() 读取单个字符。     void write(int c) 写入单个字符。

int read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。

void write(char[] cbuf, int off, int len)  写入字符数组的某一部分。


代码演示:

字节流转换为字符流

//字节流转换为字符流
	@Test
	public void demo1() throws IOException{
		//下面就是通过转换流的套接,完成了(System.in)InputStream到BufferReader的转换。
		InputStreamReader isr=new InputStreamReader(System.in);
		BufferedReader br=new BufferedReader(isr);	//转换流相当于字符流,所以可以当做,字符流套接的参数
		//下面就是通过转换流的套接,完成了FileOutputStream到BufferedWriter的转换
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
		String str=null;
		while((str=br.readLine())!=null){
			if(str.equalsIgnoreCase("over")){
				break;
			}
			System.out.println(str.toUpperCase());
			bw.write(str);
			bw.write("\n");
		}
		isr.close();
		br.close();
		
		bw.close();
	}
结果:

zi jie liu dao zi Fu liu de mo zhuan huan
ZI JIE LIU DAO ZI FU LIU DE MO ZHUAN HUAN
over
以平台默认编码进行读写

//以平台指定编码进行读写
	@Test
	public void demo2() throws IOException{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("默认.txt"));
		osw.write("平台默认编码");  //这里是我的MyEclipse的编码utf_8;
		osw.close();
	
		InputStreamReader isr=new InputStreamReader(new FileInputStream("默认.txt"));
		BufferedReader br=new BufferedReader(isr);
		String str=null;
		while((str=br.readLine())!=null){
			System.out.println(str);
		}
		isr.close();
		br.close();
	}
结果

平台默认编码

自己指定编码进行读写

//指定编码进行读写
	@Test
	public void demo4() throws IOException{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"gbk");
		osw.write("指定为gbk编码");
		osw.write("\n");
		osw.write("指定为gbk编码");
		osw.write("\n");
		osw.close();
		InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"gbk");
		char b[]=new char[8];
		int len=0;
		while((len=isr.read(b))!=-1){
			String str=new String(b,0,len);
			System.out.print(str);
		}
		
		OutputStreamWriter osw2=new OutputStreamWriter(new FileOutputStream("utf8.txt"),"utf-8");
		osw2.write("\n");
		osw2.write("指定为utf-8编码");
		osw2.write("\n");
		osw2.write("指定为utf-8编码");
		osw2.write("\n");
		osw2.close();
		InputStreamReader isr2=new InputStreamReader(new FileInputStream("utf8.txt"),"utf-8");
		char b2[]=new char[8];
		int len2=0;
		while((len2=isr2.read(b2))!=-1){
			String str=new String(b2,0,len2);
			System.out.print(str);
		}
	}

结果

指定为gbk编码
指定为gbk编码

指定为utf-8编码
指定为utf-8编码

你可能感兴趣的:(流)