BufferedInputStream 向另一个输入流添加功能,即缓冲输入并支持标记和重置方法的能力。 创建 BufferedInputStream 时,会创建一个内部缓冲区数组。 当流中的字节被读取或跳过时,内部缓冲区会根据需要从包含的输入流中重新填充,一次填充多个字节。 标记操作记住输入流中的一个点,重置操作导致在从包含的输入流中获取新字节之前重新读取自最近一次标记操作以来读取的所有字节。
BufferedOutputStream该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以将字节写入底层输出流,而不必为每个写入的字节调用底层系统。
使用Buffered流适用于一些二进制文件的场景,如果是文本等场景可以使用BufferedReader和BufferedWriter效率会更好一些。
功能描述:
使用Buffered流拷贝一个png文件,先查找在目标文件下该文件是否存在,如果不存在先创建文件。然后在拷贝。
代码如下:
@Test
public void bufferedStreamCopyPicture(){
String filePath = "C:\\Users\\JinZh\\IdeaProjects\\TestJa\\software\\target.png";
File file = new File(filePath);
if(!file.exists()){
try {
boolean newFile = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
String fromPath = "C:\\Users\\JinZh\\IdeaProjects\\TestJa\\software\\mypicture.png";
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
byte[] bufs = new byte[1024];
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(fromPath));
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(filePath));
int len;
while((len =bufferedInputStream.read(bufs))!=-1){
bufferedOutputStream.write(bufs, 0, len);
}
System.out.println("拷贝结束");
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(bufferedInputStream!=null){
bufferedInputStream.close();
}
if(bufferedOutputStream!=null){
bufferedOutputStream.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}