转换流-转换流的原理、InputStreamReader类和OutputStreamWriter类
转换流的原理
OutputStreamWriter类
OutputStreamWriter:是字符流通向字节流的桥梁 可以使用指定的charset将要写入流中的字符编码成字节(编码:将能看懂的编程看不懂的)
父类的共性成员方法:
void write(int c)写入单个字符 void write(char[] cbuf)写入字符数组 abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分 off数组的开始索引 len写的字符个数 void write(String str)写入字符串 void write(String str,int off,int len)写入字符串的某一部分 off字符串的开始索引 len的字符个数 void close()关闭此流 但要先刷新它
构造方法
OutputStreamWriter(OutputStream out):创建使用默认字符编码 outputStringWriter OutputStreamWriter(OutputStream out,String charsetName):创建使用指定字符集的OutputStreamWriter
参数:
OutputStream out:字节输入流 可以用来写转换之后的字节到文件中
String charsetName:指定的编码表名称 不区分大小写 可以是utf-8/UTF-8,GBK 不指定默认使用UTF-8
使用步骤
1.创建OutputStreamWriter对象 构造方法中传递字节输出流和指定的编码表名称
2.使用OutputStreanWruter对象中的方法Wrute 把字符转换为字节存储缓存去中(编码)
3.使用OutputStreamWriter对象中的方法fluash 把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
4.获取资源
代码:
public static void main(String[] args) throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\file\\d.txt"), "utf-8"); osw.write("你好"); osw.close(); }
运行前:

运行结果:

运行后

d.txt:

InputStreamReader类
转换流InputStreamReader 是Reader的子类 是从字节流的桥段 它读取自己 并使用指定的字符集将其解码为字符 它的字符集可以由名称指定 也可以接受平台的默认字符集
InputStreamReader:是字节流通向字符流的桥梁:它使用指定的charser读取字节并将其解码为字符(解码:把看不懂的变成能看懂的)
父类的共性成员方法:
int read():读取单个字符并返回 int read(char[] cbuf)一次读取多个字符 将字符读入数组 void close():关闭该流并释放与之关联的所有资源
构造方法
InputStreamReader(InputStream in):创建一个使用默认字符集的字符流 InputStreamReader(InputStream in,String charName):创建一个指定字符集的字符流
参数:
InputStream in:字节输入流 用来读取文件中保存的字节
String charserName:指定的编码表 不区分大小写 可以是utf-8/UTF-8 不指定默认使用UTF-8
使用步骤:
1.创建InputStreamReader对象 构造方法中传递字节输入流和指定的编码表名称
2.使用InputStreamReader对象中的方法read读取文件
3.释放资源
注意事项:
构造方法中指定的编码表名称要和文件的编码相同 否则会发生乱码
代码:
public static void main(String[] args) throws Exception { InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\file\\d.txt"),"UTF-8"); int len=0; while ((len=isr.read())!=-1){ System.out.println((char) len); } isr.close(); }
运行结果:



浙公网安备 33010602011771号