1.字节缓冲流
1.1字节缓冲流构造方法
- 字节缓冲流介绍
- lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写 入字节,而不必为写入的每个字节导致底层系统的调用
- lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
- 构造方法:
方法名 |
说明 |
BufferedOutputStream(OutputStream out) |
创建字节缓冲输出流对象 |
BufferedInputStream(InputStream in) |
创建字节缓冲输入流对象 |
示例代码
public class BufferStreamDemo {
public static void main(String[] args) throws IOException {
//字节缓冲输出流:BufferedOutputStream(OutputStream out)
// FileOutputStream fos = new FileOutputStream("demo_bs\\bos.txt");
// BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("demo_bs\\bos.txt"));
//写数据
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
//释放资源
bos.close();
//字节缓冲输入流:BufferedInputStream(InputStream in)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("demo_bs\\bos.txt"));
//一次读取一个字节数据
// int by;
// while ((by=bis.read())!=-1) {
// System.out.print((char)by);
// }
//一次读取一个字节数组数据
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
//释放资源
bis.close();
}
}
1.2字节流复制视频
- 案例需求
- 把“E:\demo\vedio.avi”复制到模块目录下的“copy.avi”
- 实现步骤
- 根据数据源创建字节输入流对象
- 根据目的地创建字节输出流对象
- 读写数据,复制视频
- 释放资源
- 代码实现
/*
四种方式实现复制视频,并记录每种方式复制视频的时间
1:基本字节流一次读写一个字节 共耗时:64565毫秒
2:基本字节流一次读写一个字节数组 共耗时:107毫秒
3:字节缓冲流一次读写一个字节 共耗时:405毫秒
4:字节缓冲流一次读写一个字节数组 共耗时:60毫秒
*/
public class CopyAviDemo {
public static void main(String[] args) throws IOException {
//记录开始时间
long startTime = System.currentTimeMillis();
//复制视频
// method1();
// method2();
// method3();
method4();
//记录结束时间
long endTime = System.currentTimeMillis();
System.out.println("共耗时:" + (endTime - startTime) + "毫秒");
}
//字节缓冲流一次读写一个字节数组
public static void method4() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\demo\\vedio.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("demo_bs\\copy.avi"));
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
bos.write(bys,0,len);
}
bos.close();
bis.close();
}
//字节缓冲流一次读写一个字节
public static void method3() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStrea