这篇博客主要是总结一下Java中IO字节字符转换流的知识
1.转换流概述
转换流:可以将一个字节流转换成字符流也可以将一个字符流转换成字节流
2.OutputStreamWriter
可以将输出的字符流转换为字节流输出形式
public class OutputStreamWriter
extends Writer
OutputStreamWriter是字符流通向字节流的桥梁:可以用指定的charset将要写入流中的字符编码成字节。它使用的字符集可以由
名称指定或者显示给定,否则将接受平台默认的字符集
/**
* 使用转换流,把字符流转换成字节流输出
*/
public static void writer()
{
try {
OutputStream outputStream = new FileOutputStream(
"H:"+ File.separator+"转换流.txt" );
String info="山不在高,有仙则名。水不在深,有龙则灵";
//通过字节输出流构造一个字符输出流
Writer writer=new OutputStreamWriter(outputStream);
writer.write(info);
//关闭流
writer.close();
outputStream.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}
3.InputStreamReader
可以将输入的字节流转换为字符流输入形式
public class InputStreamReader
extends Reader
InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显示给定,或者可以接受平台默认的字符集
/**
* 使用转换流,将字节流转换成字符流
*/
public static void reader()
{
try {
InputStream in = new FileInputStream
("H:"+ File.separator+"转换流.txt");
//通过字节输入流构造一个字符输入流
Reader reader =new InputStreamReader(in);
char []cs = new char[10];
int len=-1;
StringBuilder stringBuilder = new StringBuilder();
while ((len=reader.read(cs))!=-1)
{
stringBuilder.append(new String(cs,0,len));
}
reader.close();
in.close();
System.out.println(stringBuilder);
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}
}
怎么去理解这两个转换流呢?其实可以这样来理解还是要以内存本身为中心,并且内存本身是字符流而外部文件是字节流,OutputStreamWriter是内存的输出操作,故是将字符流转换成字节流,而InputStreamReader是从文件向内存传出内容,故是将字节流转换成字符流