javaIO流---转换流与缓冲流
一、重点知识
抽取方法的快捷键 alt+shift+m
fileread和filewriter是转换流的子类
write是可以直接写出字符串的,或者写出字符串得一部分
转换流的父类是read 和 writer
关闭流只关闭外层流就可以了,外层流调用close会自动调用内层流的close
转换流一般在网络编程中使用,因为网络编程中获得的都是字节流,所以需要转换流
String类型数据在创建时也可以指定编码集
只有转换流可以指定编码集,别的流都不可以
缓冲流自带字节数组作为缓冲区容量为1024*8,数组在内存空间中,所以读取速度快
处理流和节点流并不一定有子父类关系
缓冲流的优势在于他的缓存空间自己管理,不需要我们去管理了
二、重点问题
如果用字符流读取不同编码得文件会乱码吗
会的,因为不用的编码对应着不同的规则,编码决定了解码的方式,开发工具有自己开始设置的字符集
三、课堂知识
3.1、FileReader
读取方法
read()-->int,读取一个字符,返回值就是读到的数据,末尾-1.
read(char[] cs)-->int,读取多个字符,存入cs字符数组中,返回值读取的个数。末尾-1
read(char[] cs,int off,int len)-->int,读取多个字符,末尾-1
读入的文件一定要存在,否则就会报FileNotFoundException。
3.2、FileWriter
1、构造方法:
FileWriter(String path);
FileWriter(File file);
FileWriter(String path,boolean append);
FileWriter(File file, boolean append);
2、写出数据
void write(int),将参数这个字符,写出去
void write(char[] cs),将整个cs数组的所有数据,全部写出
void write(char[] cs,int off,int len),将cs数组的一部分写出,从下标off开始,len个
void write(String s),直接将一个字符串写出
void write(String s, int off,int len),写出字符串的一部分
3.3、InputStreamReader
InputStreamReader:将一个字节的输入流转换为字符的输入流
解码:字节、字节数组 --->字符数组、字符串
3.4、OutputStreamWriter
OutputStreamWriter:将一个字符的输出流转换为字节的输出流
编码:字符数组、字符串 ---> 字节、字节数组
3.5缓冲流
1.缓冲流涉及到的类:
* BufferedInputStream
* BufferedOutputStream
* BufferedReader
* BufferedWriter
2.作用
缓存流:目的:高效。
原理:自带了一个数组作为缓冲区。读写发生在数组上。数组占内存,速度很快。
FileInputStream
read()-->int,访问磁盘,操作文件,读一个字节回来。。
BufferedInputStream
read()-->int,先找缓冲区,从缓冲区中读取一个字节回来。fill(),读取磁盘文件,填充缓冲区
byte[] bs ,作为缓冲区:1024*8。