IO之OutputStreamWriter和InputStreamReader

1.字符编码:就是一套自然语言的字符与二进制数之间的对应规则。
编码表:生活中文字和计算机中二进制的对应规则。
编码:按照某种规则,将字符存储到计算机中。
解码:将存储在计算机中的二进制数按照某种规则解析出来。

2.字符集charset:也叫编码表。是一个系统支持的所有字符的集合,包括各国家的文字、标点符号、图形符号、数字等。
常见的字符集有:ASCII字符集、GBK字符集、Unicode字符集(utf-8、utf-166、utf-32)
GBK:2个字节
UTF-8:3个字节

3.编码引出的问题:在IDEA中,使用FileReader读取项目中的文本文件。由于IDEA的设置,都是默认的UTF-8,所以没有任何问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统默认是GBK编码,就会出现乱码。

4.OutputStreamWriter 编码(看懂的变成看不懂的)
是字符流通向字节流的桥梁,可使用指定的charset
构造方法:(1)OutputStreamWriter(OutputStream out);创建使用默认字符编码的OutputStreamWriter
(2)OutputStreamWriter(OutputStream out,String charsetName);选用指定的字符集

public static void main(String[] args) throws IOException {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("dos.dat"),"utf-8");
		osw.write("你好");
		osw.flush();
		osw.close();
	}

5.InputStreamReader 解码(看不懂的变成能看懂的)
是字节流通向字符流的桥梁,可使用指定的charset
构造方法:(1)InputStreamReader (InputStreamReader in);创建使用默认字符编码的OutputStreamWriter
(2)InputStreamReader (InputStreamReader in,String charsetName);选用指定的字符集
注意:构造方法中指定的便秘吗表名称要和文件的编码相同,否则会发生乱码

public static void main(String[] args) throws IOException {
		InputStreamReader  isr = new InputStreamReader (new FileInputStream("dos.dat"),"utf-8");
		int len = 0;
		while((len = isr.read()) != -1) {
			System.out.println((char)len);
		}
		isr.close();
	}

6.转换文件编码

public static void main(String[] args) throws IOException {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("dos.dat"),"GBK");
		InputStreamReader  isr = new InputStreamReader (new FileInputStream("dos1.dat"),"utf-8");
		
		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、付费专栏及课程。

余额充值