一、四种基本抽象类
- InputStream 字节输入流
- OutputStream 字节输出流
- Reader 字符输入流
- Writer 字符输出流
1.InputStream 字节输入流
//常用方法
abstract int read(); //读取一个字节,并返回,到结尾返回-1.
int read(byte[] b); //读取一个字节数组,返回实际读入的字节数,或者碰到输入流的结尾时返回-1。
int read(byte[] b,int off,int len); //读入一个字节数组。off表示第一个字节的偏移量,len表示读入最大字节量
void close(); //关闭流
2.OutputStream 字节输出流
//常用方法
abstract void write(int n); //写出一个字节的数据
void write(byte[] b);
int write(byte[] b,int off,int len); //写入一个字节数组。off表示第一个字节的偏移量,len表示写入最大字节量
void close(); //关闭流
void flush(); //刷新
3.Reader 字符输入流
protected Reader()
//创建一个新的字符流 reader,其重要部分将同步其自身的 reader。
protected Reader(Object lock)
//创建一个新的字符流 reader,其重要部分将同步给定的对象。
4.Writer 字符输出流
protected Writer()
//创建一个新的字符流其关键部分将同步 writer 自身。
protected Writer(Object lock)
//创建一个新的字符流写,其关键部分将同步给定的对象。
二、字节流
1.FileInputStream 文件字节输入流(常用)
//构造方法
FileInputStream input = FileInputStream(String name);
FileInputStream input = FileInputStream(File file);
//创建一个带缓冲区的输入流。带缓冲区的输入流从流中读取字符时,不会每次都会对设备进行访问。当缓冲区为空时,会向缓冲区中读入一个新的数据块
BufferedInputStream bufferedInput = new BufferedInputStream(InputStream实例对象);
2.FileOutputStream 字节输出流(常用)
//构造方法
FileOutputStream output = FileOutputStream(String name);
FileOutputStream output = FileOutputStream(File file);
//append参数为true表示数据会追加到文件末尾,不写默认为清空数据重新写
FileOutputStream output = FileOutputStream(String name,boolean append);
FileOutputStream output = FileOutputStream(File file,boolean append);
//创建一个带缓冲区的输出流。带缓冲区的输出流在收集要写出的字符时,不会每次都对设备访问,当缓冲区填满或当被刷新时,数据就被写出。
BufferedOutputStream bufferedOutput = new BufferedOutputStream(OutputStream实例对象);
举一个用FileInputStream类和FileOutputStream类完成文件复制的栗子
//使用字节数组完成图片文件的复制
public class CopyPicture {
public static void main(String[] args) throws IOException {
//创建输入流和输出流对象
FileInputStream input = new FileInputStream("d:\\Test\\照片.jpg");
FileOutputStream output = new FileOutputStream("d:\\target\\copy照片.jpg");
//边读边写,为加快复制速度,传入byte类型的字节数组
int readCount;
byte[] bytes = new byte[1024];
while ((readCount = input.read(bytes)) != -1)output.write(bytes);
input.close();
output.close();
}
}
3.BufferedInputStream
构造方法
BufferedInputStream(InputStream in) | 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。(默认缓冲区大小8KB) |
---|---|
BufferedInputStream(InputStream in, int size) | 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用 |
read()方法
int read() | 参见 InputStream 的 read 方法的常规协定。 |
---|---|
int read(byte[] b, int off, int len) | 从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。 |
4.BufferedOutputStream
构造方法
BufferedOutputStream(OutputStream out) | 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。(默认缓冲区大小是8KB) |
---|---|
BufferedOutputStream(OutputStream out, int size) | 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流 |
write方法
void write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。 |
---|---|
void write(int b) | 将指定的字节写入此缓冲的输出流。 |
三、字符流
1.InputStreamReader(字符集转换流)
//构造方法
InputStreamReader(InputStream in)
//创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
//创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
//创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
//创建使用指定字符集的 InputStreamReader。
2.OutputStreamWriter (字符集转换流)
OutputStreamWriter(OutputStream out)
//创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
//创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
//创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
//创建使用指定字符集的 OutputStreamWriter。
3.FileWriter和FileReader简化流
构造方法
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 |
---|
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 |
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 |
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
成员方法(可以直接写入字符串)
void | write(char[] cbuf) 写入字符数组。 |
---|---|
abstract void | write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | write(int c) 写入单个字符。 |
void | write(String str) 写入字符串。 |
void | write(String str, int off, int len) 写入字符串的某一部分。 |
构造方法
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 |
---|
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 |
简化流 VS 转化流
- 从使用便捷角度看,简化流更方便
- 转化流可以指定字符集 对于简化流只能使用默认的字符集
4.缓冲流BufferedWriter和BufferedReader
构造方法
BufferedWriter(Writer out) | 创建一个使用默认大小输出缓冲区的缓冲字符输出流。(默认缓冲区16KB) |
---|---|
BufferedWriter(Writer out, int sz) | 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。 |
独有的方法
void | newLine() 写入一个行分隔符。 |
---|
构造方法
BufferedReader(Reader in) | 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
---|---|
BufferedReader(Reader in, int sz) | 创建一个使用指定大小输入缓冲区的缓冲字符输入流。 |
独有方法
String | readLine() 读取一个文本行。 |
---|---|
可以读写行