目录
1.字节缓冲流
1.1 字节缓冲流构造方法
字节缓冲流介绍
- lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写 入字节,而不必为写入的每个字节导致底层系统的调用
- lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过 字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
构造方法:
方法名 | 说明 |
---|---|
BufferedOutputStream(OutputStream out) | 创建字节缓冲输出流对象 |
BufferedInputStream(InputStream in) | 创建字节缓冲输入流对象 |
示例代码:
@Test
public void demo1(){
//字节缓冲输出流:BufferedOutputStream(OutputStream out)
try(BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\bos.txt"))){
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void demo2(){
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\bos.txt"))){
byte[] bytes = new byte[1024];
int len;
while((len = bis.read(bytes)) != -1){
System.out.println(new String(bytes,0,len));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1.2 字节流复制视频
案例需求:
把“D:\project\study_project\javase\src\test\java\com\zhangzemin\io\shiping.mp4”复制到“D:\project\study_project\javase\src\test\java\com\zhangzemin\io\buffer_stream\shiping.mp4”
1.2.1 基本字节流一次读写一个字节
public void method01(){
try(FileInputStream fis = new FileInputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\shiping.mp4");
FileOutputStream fos = new FileOutputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\shiping.mp4")){
int by;
while((by = fis.read()) != -1){
fos.write(by);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1.2.2 基本字节流一次读写一个字节数组
public void method02(){
try(FileInputStream fis = new FileInputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\shiping.mp4");
FileOutputStream fos = new FileOutputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\shiping.mp4")){
byte[] bytes = new byte[1024];
int len;
while((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1.2.3 字节缓冲流一次读写一个字节
public void method03(){
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\shiping.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\shiping.mp4"))){
int by;
while ((by = bis.read()) != -1){
bos.write(by);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1.2.4 字节缓冲流一次读写一个字节数组
public void method04(){
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\shiping.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\project\\study_project\\javase\\src\\test\\java\\com\\zhangzemin\\io\\buffer_stream\\shiping.mp4"))){
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1){
bos.write(bytes,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1.2.5 结果
public void demo3(){
//记录开始时间
long startTime = System.currentTimeMillis();
//基本字节流一次读写一个字节
//method01();//共耗时:21939毫秒
//基本字节流一次读写一个字节数组
//method02();//共耗时:27毫秒
//字节缓冲流一次读写一个字节
//method03();共耗时:74毫秒
//字节缓冲流一次读写一个字节数组
//method04();共耗时:8毫秒
//记录结束时间
long endTime = System.currentTimeMillis();
System.out.println("共耗时:"+(endTime-startTime)+"毫秒");
}
1.2.6 总结
基本字节流一次读写一个字节:共耗时:21939毫秒
基本字节流一次读写一个字节数组:共耗时:27毫秒
字节缓冲流一次读写一个字节:共耗时:74毫秒
字节缓冲流一次读写一个字节数组:共耗时:8毫秒