java中OutputStreamReader和OutputStreamWriter

java.io.OutputStreamWriter

java.io.OutputStreamWriter extends Writer
OutputStreamWriter是字符流通向字节流的桥梁,可使用指定的charset ,将其写入流中的字符编码为字节
构造方法:
*OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
*OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter
参数:
*OutputStream out:字节输出流,可以用来写转换之后的字节到文件中
*String charsetName:指定编码名称,不区分大小写,默认为UTF-8格式

java.io.InputStreamReader

java.io.InputStreamReader extends Reader
InputStreamReader是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符 。
构造方法:
*InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。
*InputStreamReader(InputStream in, String charsetName)
创建一个使用命名字符集的InputStreamReader。
参数:
*OutputStream out:字节输出流,可以用来写转换之后的字节到文件中
*String charsetName:指定编码名称,不区分大小写,默认为UTF-8格式

测试

使用OutputStreamWriter和InputStreamReader 进行读取和写入,测试结果表明:
*1使用GBK格式写中文不能用utf-8正确读取
*2使用GBK格式写ASCII中的字符可以用utf-8正确读取
原因:
1因为GBK下中文占2字节,UTF-8下中文占3字节。
2因为GBK和UTF-8两种编码方式都兼容了ASCII编码格式

测试例程如下:

	public static void main(String[] args) throws IOException {
		OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream("osw.txt",false),"GBK");  
		for(int i=0;i<5;i++) {
			osw.write('a');
		} 
		osw.write("你好");
		//写入结束
		osw.close();
		//写入结束后再读取 
		//使用GBK格式写中文不能用utf-8正确读取,因为GBK下中文占2字节,UTF-8下中文占3字节
		//InputStreamReader isr=new InputStreamReader(new FileInputStream("osw.txt"),"GBK") ;
		InputStreamReader isr=new InputStreamReader(new FileInputStream("osw.txt"),"Utf-8") ;
		int len=0;
		while((len=isr.read())!=-1) {
			System.out.print((char)len);
		} 
		isr.close();
	}

应用案例:文本格式转换——将Utf-8格式文档转存为GBK格式

	public static void main(String[] args) throws IOException {
		//创建读取
		InputStreamReader isr=new InputStreamReader(new FileInputStream("isr.txt"),"Utf-8") ;
		//创建写入
		OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream("osw.txt",false),"GBK");  
		//读取文件并写入
		int len=0;
		while((len=isr.read())!=-1) {
			osw.write(len);
		}
		osw.close();
		isr.close(); 
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值