1.OutputStreamWrite类

FileReader类不可以指定编码,他只有使用默认的编码(暂时不知道默认编码是什么)。但是现在文本有UTF-8,GBK等等编码,如果传输的编码不相对应,会出现乱码。

现在OutputStreamWrite可以指定编码。

* OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节
* 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去

2.转换流

OutputStreamWrite:字符流向字节。

InputStreamReader:字节流向字符。

写:通过OutputStramWrite,指定编码读取文件,在File类写入文件。

读:通过FileInputSream一个一个字节读取,给InputStreamReader,指定编码解码。

setRequestBody指定编码 outputstream 指定编码_转换流


3.OutputStreamWriter写文本

注意:

1.GBK:一个汉字2个字节。UTF-8:一个汉字3个字节。

2.在写编码的时候只有GBK和UTF-8.不区分大小写。可以小写,也可以大写。

3.系统默认编码表GBK

4.close只要关闭OutputStream就可以,在关闭它的同时也会关闭FileOutputStream。

/*
					 * 转换流对象OutputStreamWriter写文本
					 * 采用UTF-8编码表写入
					 */
					public static void writeUTF()throws IOException{
						//创建字节输出流,绑定文件
						FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
						//创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
						OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
						osw.write("你好");
						osw.close();
					}
					
					/*
					 * 转换流对象 OutputStreamWriter写文本
					 * 文本采用GBK的形式写入
					 */
					public static void writeGBK()throws IOException{
						//创建字节输出流,绑定数据文件
						FileOutputStream fos = new FileOutputStream("c:\\gbk.txt");
						//创建转换流对象,构造方法,绑定字节输出流,使用GBK编码表
						OutputStreamWriter osw = new OutputStreamWriter(fos);
						//转换流写数据
						osw.write("你好");
						
						osw.close();
					}


4.InputSteamReader读取文本文件

注意:

1.如果不指定编码,那么默认为GBK。

/*
				 *  转换流,InputSteamReader读取文本
				 *  采用UTF-8编码表,读取文件utf
				 */
				public static void readUTF()throws IOException{
					//创建自己输入流,传递文本文件
					FileInputStream fis = new FileInputStream("c:\\utf.txt");
					//创建转换流对象,构造方法中,包装字节输入流,同时写编码表名
					InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
					char[] ch = new char[1024];
					int len = isr.read(ch);
					System.out.println(new String(ch,0,len));
					isr.close();
				}
				/*
				 *  转换流,InputSteamReader读取文本
				 *  采用系统默认编码表,读取GBK文件
				 */
				public static void readGBK()throws IOException{
					//创建自己输入流,传递文本文件
					FileInputStream fis = new FileInputStream("c:\\gbk.txt");
					//创建转换流对象,构造方法,包装字节输入流
					InputStreamReader isr = new InputStreamReader(fis);
					char[] ch = new char[1024];
					int len = isr.read(ch);
					System.out.println(new String(ch,0,len));
					
					isr.close();
				}


5.转换流子类父类的区别

* A: 转换流子类父类的区别
		* a: 继承关系
			OutputStreamWriter:
				|--FileWriter:
			InputStreamReader:
				|--FileReader;
		* b: 区别
			* OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。
			* FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。
				当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。
			* 以下三句话功能相同
				* InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认字符集。
				* InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。
				* FileReader fr = new FileReader("a.txt");