IO流
一、字节缓冲流
1.概述
- BufferedOutputStream:该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
- BufferedInputStream:创建BufferedInputStream对象将创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需求从所包含的输入流中重新填充,一次很多字节。
2.构造方法
- 字节缓冲输出流:BufferedOutputStream(OutputStream out)
- 字节缓冲输入流:BufferedInputStream(InputStream in)
注意:字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
二、案例
1.需求
实现视频的复制,用四种方法并比较耗费时间。
2.思路
- 根据数据源创建字节输入流对象
- 根据目的地创建字节输出流对象
- 读写数据复制视频
- 释放资源
3.代码实现
package IOStudy;
import java.io.*;
public class Demo7 {
public static void main(String[] args) throws IOException{
//系统当前时间
long starttime = System.currentTimeMillis();
//复制视频
method4();
//记录结束时间
long endstart = System.currentTimeMillis();
System.out.println("共耗时:" + (endstart - starttime) + "ms");
}
public static void method1() throws IOException {
//一个字节一个字节复制
//根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("D:\\_A\\shipin.kux");
//根据目的地创建字节输出流对象
FileOutputStream fos = new FileOutputStream("D:\\_A\\B\\shipin.kux");
int by;
while ((by = fis.read()) != -1){
fos.write(by);
}
fis.close();
fos.close();
}
//230
public static void method2() throws IOException {
//一次一个字节数据数组
//根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("D:\\_A\\shipin.kux");
//根据目的地创建字节输出流对象
FileOutputStream fos = new FileOutputStream("D:\\_A\\B\\shipin.kux");
byte[] bys = new byte[1024];
int len;
while ((len = fis.read(bys)) != -1) {
fos.write(bys,0,len);
}
fis.close();
fos.close();
}
//750
public static void method3() throws IOException {
//一个字节一个字节复制
//创建BufferedInputStream对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\_A\\shipin.kux"));
//创建BufferedOutputStream对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\_A\\B\\shipin.kuxt"));
int by ;
while ((by = bis.read()) != -1){
bos.write(by);
}
bis.close();
bos.close();
}
//63
public static void method4() throws IOException {
//一个字节一个字节复制
//创建BufferedInputStream对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\_A\\shipin.kux"));
//创建BufferedOutputStream对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\_A\\B\\shipin.kuxt"));
byte[] bys = new byte[1024];
int len ;
while ((len = bis.read(bys)) != -1){
bos.write(bys,0,len);
}
bis.close();
bos.close();
}
}