Java转换流(InputStreamReader和OutputStreamWriter)的用法
前面已经介绍过字节流和字符流,两者的区别在于每次处理数据的单位不同,字节流是基础管道,字符流是在字节流的基础上转换来的。
Java 提供了完成转换功能的类,按照输入和输出两个方向分为输入转换流(InputStreamReader)和输出转换流(OutputStreamWriter),我们来看看字符流的类定义,FileReader 的定义是:
同理,FileWriter 继承自 OutputStreamWriter:
InputStreamReader 的使用可以参考下方的程序:
OutputStreamWriter 的使用可以参考下方的程序:
Java 提供了完成转换功能的类,按照输入和输出两个方向分为输入转换流(InputStreamReader)和输出转换流(OutputStreamWriter),我们来看看字符流的类定义,FileReader 的定义是:
public class FileReader extends InputStreamReader{}可以看到,FileReader 继承自 InputStreamReader,即输入转换流。通过这个类将字节流转为字符流,字节是基本单位,所以是基础管道。
同理,FileWriter 继承自 OutputStreamWriter:
public class FileWriter extends OutputStreamWriter{}InputStreamReader 和 OutputStreamWriter 分别是 Reader 和 Writer 的子类,定义为:
public class InputStreamReader extends Reader{} public class OutputStreamWriter extends Writer{}处理流将字节流转换为字符流的过程如下图所示:
InputStreamReader 的使用可以参考下方的程序:
public class Test { public static void main(String[] args) { try { InputStream inputStream = new FileInputStream("/Users/southwind/Desktop/ test.txt"); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); Reader reader = inputStreamReader; char[] chars = new char[1024]; int length = reader.read(chars); reader.close(); String result = new String(chars,0,length); System.out.println(result); } catch (FileNotFoundException e) { } } }通过上述程序来读取 test.txt 的内容,test.txt中的内容是 hello world,程序的运行结果为:
hello world
OutputStreamWriter 的使用可以参考下方的程序:
public class Test { public static void main(String[] args) { String str = "你好 世界"; try { OutputStream outputStream = new FileOutputStream("/Users/southwind/ Desktop/test2.txt"); OutputStreamWriter outputStreamSriter = new OutputStreamWriter(outputStream); Writer writer = outputStreamSriter; writer.write(str); writer.flush(); writer.close(); } catch (FileNotFoundException e) { } } }上述程序会将“你好 世界”写入到桌面的 test2.txt 中,打开test2.txt 会看到“你好 世界”。