缓冲流与节点流类似,也是由四个IO流的抽象基类继承过来的,与节点流不同的地方就在于缓冲流的效率更高,且缓冲流的构造器形参是节点流,下面是四个缓冲流:
①BufferedInputStream
②BufferedOutputStream
③BufferedReader
④BufferedWriter
一、BufferedInputStream与BufferedOutputStream的使用
从他们的名字可以看出,他们和节点流中的FileInputStream与FileOutputStream所处理的类型是一样的,他们同样是用来处理字节的,也就是说他们也有相应的read()方法与write()方法,并且他们的形参是一个byte型数组,下面是利用他们实现文件的复制方法:
import
java.io.*;
import
org.junit.Test;
public
class
TestBuffered {
@Test
public
void
test(){
BufferedInputStream
bis
=
null
;
BufferedOutputStream
bos
=
null
;
try
{
//提供读入和写入的文件
File
file
=
new
File(
"Hello.txt"
);
//读入的文件必须存在
File
file1
=
new
File(
"Hello2.txt"
);
//创建节点流
FileInputStream
fis
=
new
FileInputStream(
file
);
FileOutputStream
fos
=
new
FileOutputStream(
file1
);
//将创建好的节点流的对象作为形参传入到缓冲流的构造器中
bis
=
new
BufferedInputStream(
fis
);
bos
=
new
BufferedOutputStream(
fos
);
//开始文件的复制
byte
[]
b
=
new
byte
[128];
//创建字节型数组b
int
len
;
while
((
len
=
bis
.read(
b
)) != -1)
{
bos
.write(
b
, 0,
len
);
}
}
catch
(IOException
e
) {
e
.printStackTrace();
}
finally
{
//复制完成后关闭文件
try
{
bis
.close();
bos
.close();
}
catch
(IOException
e
) {
//
TODO
Auto-generated catch block
e
.printStackTrace();
}
}
}
}
二、BufferedReader与BufferedWriter
BufferedReader、BufferedWriter与FileReader、FileWriter不同之处就在于前者的效率更高,同时BufferedReader中还有一个新方法为readLine(),它的返回值为一个String类型的字符串,具体的使用方法看下面的例子
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.File;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.io.IOException;
import
org.junit.Test;
public
class
TestBufferedReaderWriter {
@Test
public
void
test(){
BufferedReader
bi
=
null
;
BufferedWriter
bo
=
null
;
try
{
//创建读入和读取的对象
File
file
=
new
File(
"Hello.txt"
);
File
file1
=
new
File(
"Hello5.txt"
);
//提供所需流
FileReader
fi
=
new
FileReader(
file
);
FileWriter
fo
=
new
FileWriter(
file1
);
bi
=
new
BufferedReader(
fi
);
bo
=
new
BufferedWriter(
fo
);
String
str
;
//开始读取
while
((
str
=
bi
.readLine()) !=
null
)
//读取一行。若读取到文件末尾,则返回空
{
bo
.write(
str
);
bo
.newLine();
//换行,因为它在使用readLine()写入时不会自动换行
bo
.flush();
}
}
catch
(IOException
e1
) {
e1
.printStackTrace();
}
if
(
bi
!=
null
)
{
try
{
bi
.close();
}
catch
(IOException
e
) {
e
.printStackTrace();
}
}
}
}