建议直接看例子,本人对此知识模糊
在 整 个 i o 包 中 , 实 际 上 就 是 分 为 字 节 流 和 字 符 流 , 但 是 除 了 这 两 个 流 之 外 , 还 存 在 一 组 字
节流一字符流的转换类。
(1) OutputStreamWriter
:是Writer
的子类,将输出的字符流变为字节流,即将一个字符流 的输出对象变为字节流输出对象。
(2) InputStreamReader
:是Reader
的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。
如果以文件操作为例,则在内存中的字符数据需要通过OutputStreamWriter
变为字节流才能保存在文件中,读取时需要将读入的字节流通过InputStreamReader
变为字符流,转换步骤如图
可以清楚地发现,不管如何操作,最终全部是以字节的形式保存在文件之中。使用OutputstreamWriter的构造方法如下:
【例12.31】将字节输出流变为字符输出流
public OutputStreamWriter(OutputStream out)
package jiaqi;
import java.io.*;
public class demo398_1
{
public static void main(String[] args)throws Exception
{
//创建OutputStream对象{字节流}
File f = new File("d:"+File.separator+"test111.txt");
OutputStream out = new FileOutputStream(f);
//创建字符流对象{将字节流-->字符流}
Writer outwriter = new OutputStreamWriter(out);
//字符流,打开
outwriter.write("hello word!!");
outwriter.close();
}
}
文件内容
【例12.32】将字节输入流变为字符输入流
package jiaqi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
public class demo398_2 {
public static void main(String[] args)throws Exception
{
//创建InputStream对象{字节流}
File f = new File("d:"+File.separator+"test111.txt");
InputStream input = new FileInputStream(f);
//创建字符流{将字节流-->字符流}
Reader rd = new InputStreamReader(input);
char c[] = new char[1024];
int len = rd.read(c);
System.out.println(new String(c,0,len));
rd.close();
}
}
结果