缓冲流相较于文件流有更快的读写速度,开发中我们也较多使用缓冲流
目录
缓冲流的使用
内部提供了一个缓冲区,可以提高流的读取、写入速度
关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略
处理流就是 “套接” 在已有的流的基础上
缓冲流实现非文本文件的复制
文本文件的操作原理相同,只不过是使用 BufferedReader ( ) 与 BufferedWriter ( )
import org.junit.Test;
import java.io.*;
public class BufferedTest {
@Test
public void BufferedTest(){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//1. 创建 File 类的对象,指明读入和写入的图片
File srcFile = new File("saber.jpg");
File destFile = new File("saber1.jpg");
//2. 造流
//2.1 创建节点流
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
//2.2 创建缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//3. 图片的复制
byte[] buffer = new byte[5];
int len;
while ((len = bis.read(buffer)) != -1){
bos.write(buffer,0,len);
// bos.flush(); 刷新缓冲区
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4. 关闭资源流
//要求:先关闭外层的流,再关闭内层的流
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//说明:关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略
// fos.close();
// fis.close();
}
}
}
利用缓冲流实现图片加密操作
import org.junit.Test;
import java.io.*;
public class BufferedTest {
@Test
public void BufferedTest(){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//1. 创建 File 类的对象,指明读入和写入的图片
File srcFile = new File("saber.jpg");
File destFile = new File("saber1.jpg");
//2. 造流
//2.1 创建节点流
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
//2.2 创建缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//3. 图片的复制
byte[] buffer = new byte[5];
int len;
while ((len = bis.read(buffer)) != -1){
for (int i = 0; i < len; i++) {
buffer[i] = (byte) (buffer[i] ^ 5);//加密操作
}
bos.write(buffer,0,len);
// bos.flush(); 刷新缓冲区
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4. 关闭资源流
//要求:先关闭外层的流,再关闭内层的流
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//说明:关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略
// fos.close();
// fis.close();
}
}
}