之前说的字符流,字节流都是节点流,直接到数据的源头或目的地去读写数据
而字符缓冲流,和字节缓冲流是处理流,不直接连接到数据源头或者目的地
节点流处于io操作的第一线,所有操作必须通过他们进行,处理流可以对其他流进行处理,提高效率或者操作灵活性
字节缓冲流有:
BufferedInputStream
BufferedOutputStream
字节流文件拷贝加入缓冲流相当简单,没有新增方法,为代码简洁我将异常抛出了,建议try-catch处理
改动地方只有这里,直接加上缓冲就ok了
InputStream is = new BufferedInputStream(new FileInputStream(src));
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));
全部代码:
public class Demo06 {
public static void main(String[] args) throws IOException {
File src = new File("F:/Picture/1.jpg");
File dest = new File("F:/Picture/copy2.jpg");
InputStream is = new BufferedInputStream(new FileInputStream(src));
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));
byte[] buffer = new byte[1024];
int len = 0;
// 从文件夹读取读取
while (-1 != (len = is.read(buffer))) {
// 写出到文件夹
os.write(buffer);
}
// 强制刷出
os.flush();
// 先打开的后关闭
if (os != null) {
os.close();
}
if (is != null) {
is.close();
}
}
}
字符缓冲流有:
BufferedReader 新增方法readLine
BufferedWriter 新增方法newLine
这里要注意,如果要使用新增方法,就不可以用多态,否则编译不会通过
新增方法可以一行一行的读取文本,然后在写出的时候添加换行
public class Demo06 {
public static void main(String[] args) throws IOException {
File src = new File("F:/Picture/test/test.txt");
File dest = new File("F:/Picture/test/test2.txt");
//不可使用多态
BufferedReader re=new BufferedReader(new FileReader(src));
BufferedWriter wr=new BufferedWriter(new FileWriter(dest));
String line=null;
while((line=re.readLine())!=null){
wr.write(line);
wr.newLine();//wr.append("\r\n");
wr.flush();
}
if(wr!=null){
wr.close();
}
if(re!=null){
re.close();
}
}