字节:一种计量单位,表示数据量的多少。(Byte)
字符:数字,字母,汉字和各种符号。(String(字符串)、char(字符))
区别:字节流没有使用到缓冲区,而字符流使用了; 处理各种数据都可以通过字节流完成,而在处理中文的时候使用字符流会更好。
转换流:通过InputStreamReader(字节输入流转换为字符输入流) 、 OutputStreamWriter(字节输出流转换为字符输出流)两个类来实现。
它们的继承关系如下:
java.lang.Object
| - java.io.Writer
| - java.io.OutputStreamWriter
| - java.io.FileWriter
java.lang.Object
| - java.io.Reader
| - java.io.InputStreamReader
| - java.io.FileReader
由上可以发现,所有要读取的文件数据都是字节数据,所有的字符都是在内存中处理后形成的。
OutputStreamWriter类的构造方法:
OutputStreamWriter(OutputStream out)
解释:OutputStreamWriter类的构造方法接收OutputStream类的对象,且OutputStreamWriter是Writer的子类,该类对象可以直接向上转型为Writer类对象,这样就可以将接收到的字节输出流转换为字符输出流。
同理,InputStreamReader也是一样。
实现输出流转换:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class TestOutputStreamWriter {
public static void main(String args[]) throws Exception{
File file = new File("D:" + File.separator + "demo.txt" + "demo.txt");
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs(); //创建父路径
}
OutputStream output = new FileOutputStream(file); //字节流
//将OutputStream类对象传递给OutputStreamWriter类的构造方法,向上转型为Writer
Writer out = new OutputStreamWriter(output);
out.write("今天星期五,上山打老虎");
out.flush();
out.close();
}
}