1.BufferedInputStream和BufferedOutputStream
(1)没有缓冲区,去复制文件,如何操作?
【案例1】复制一个大文件



思路:

(1)创建一个文件输入流对象FileInputStream,引用要复制的文件。
(2)无法一次性读入,读取这个文件的内容,到缓冲区。所以建立一个字节数组。
(3)创建一个文件输出流对象FileOutputStream,引用到目标文件。
(4)将缓冲区内容写入到目标文件。
BufferedInputStream和BufferedOutputStream的优势:
降低磁盘IO操作次数;带有缓冲区。
BufferedInputStream
构造函数:
new BufferedInputStream(InputStream):不指定缓冲区大小,默认是8192
new BufferedInputStream(InputStream,Int),参数2指定缓冲区大小
api:
int available(),返回数据流有效的长度;
void close();关闭
int read();从缓冲区中读取
int read(byte[] b,int off,int len),从数组b中off位置,读len个;
void reset();重置
long skip(long n);跳过多少个字节。
BufferedOutputStream
构造函数:
new BufferedOutputStream(outputstream)
new BufferedOutputStream(outputstream,size)
api:
void flush();
write(byte b);写入一个字节
write(byte[] b,int off,int len),从b中获取,写入开始位置为off,写len个。
【案例】使用BufferedInputStream和BufferedOutputStream复制文件。
思路:





2.BufferedReader和BufferedWriter
字符流;带有缓冲区;
BufferedReader
构造方法:
new BufferedReader(Reader in)
new BufferedReader(Reader in,int size)
api:
void close();
int read();
int read(char[] cbuf,int off,int len)
String readLine();
BufferedWriter:
构造方法:
new BufferedWriter(Writer out)
new BufferedReader(Writer out ,int size)
api:
void close()
void flush()
void new Line();写入一个换行符
void write(int c)
void write(char cbuf[],int off,int len)
void write(String s,int off,int len)
【案例】




3.InputStreamReader和OutputStreamWriter
都是转换流,将字节流转换成字符流;或者将字符流转换成字节流
OutputStreamWriter构造方法:
new OutputStreamWriter(OutputStream)
new OutputStreamWriter(OutputStream,charsetName),指定字符集编码
api:
void write(int c);
void write(String str,int off,int len)
void flush();
InputStreamReader构造方法
new InputStreamReader(inputStream)
new InputStreamReader(inputStream,charsetName),指定字符集编码
api:
int read()
int read(char[] cbuf)

【案例1】


【案例2】


步骤:
(1)使用记事本写入文件,内容中文。
(2)在代码中使用gbk来读取文件信息。保证中文不乱码。
【作业】
把昨天出题,判断是否正确,使用BufferedInputStream和BufferedOutputStream改写。
网友评论