缓冲流(两类四种)
2023-03-20 14:49:18 时间
一、缓冲字节流
1、缓冲字节输出流(BufferedOutputStream)
1 public static void main(String[] args) throws IOException { 2 /* 3 字节缓冲输出流使用步骤: 4 1:创建FileOutputStream对象,指定输出文件 5 2:创建BufferedOutputStream对象,对FileOutputStream进行“包装”,使其效率提高 6 3:使用BufferedOutputStream对象调用write方法,将数据写入内部缓冲区中 7 4:使用BufferedOutputStream对象调用flush方法,将内部缓冲区的数据刷新到文件中 8 5:释放资源(若释放资源,第4步flush可省略,因为在调用close时会先进行flush再释放资源) 9 */ 10 FileOutputStream fos = new FileOutputStream("b.txt"); 11 BufferedOutputStream bos = new BufferedOutputStream(fos); 12 bos.write("字节缓冲输出流".getBytes()); 13 bos.flush(); 14 bos.close(); 15 // fos.close();// 不用手动释放,缓冲流释放资源时自动将其内部的字节流进行关闭 16 }
2、缓冲字节输入流(BufferedInputStream)
1 public static void main(String[] args) throws IOException { 2 /* 3 字节缓冲输出流使用步骤: 4 1:创建FileInputStream对象,指定输出文件 5 2:创建BufferedInputStream对象,对FileInputStream进行“包装”,使其效率提高 6 3:使用BufferedInputStream对象调用read方法,将数据读入内部缓冲区中 7 4:释放资源 8 */ 9 10 //方式一: 11 /* 12 FileInputStream fis = new FileInputStream("b.txt"); 13 BufferedInputStream bis = new BufferedInputStream(fis); 14 int len=0; 15 while((len=bis.read())!=-1){ 16 System.out.println(len); 17 } 18 bis.close(); 19 */ 20 21 //方式二: 22 FileInputStream fis = new FileInputStream("b.txt"); 23 BufferedInputStream bis = new BufferedInputStream(fis); 24 int len = 0; 25 byte[] bytes = new byte[1024]; 26 while ((len = bis.read(bytes)) != -1) { 27 System.out.println(new String(bytes, 0, len)); 28 } 29 bis.close(); 30 }
3、测试缓冲流与字符流复制文件的速度
1 package demo09.buffer; 2 3 import java.io.*; 4 import java.util.Arrays; 5 6 public class demo07copy02 { 7 public static void main(String[] args) throws IOException { 8 copy01(); 9 copy02(); 10 } 11 12 private static void copy02() throws IOException { 13 long start = System.currentTimeMillis(); 14 FileInputStream fis = new FileInputStream("c:\1.jpg"); 15 FileOutputStream fos = new FileOutputStream("d:\1.jpg"); 16 int len = 0; 17 while ((len = fis.read()) != -1) { 18 fos.write(len); 19 } 20 fos.close(); 21 fis.close(); 22 System.out.println("使用字节流花费时间:"+(System.currentTimeMillis()-start)); 23 } 24 25 private static void copy01() throws IOException { 26 long start = System.currentTimeMillis(); 27 FileInputStream fis = new FileInputStream("c:\1.jpg"); 28 FileOutputStream fos = new FileOutputStream("d:\1.jpg"); 29 BufferedInputStream bis = new BufferedInputStream(fis); 30 BufferedOutputStream bos = new BufferedOutputStream(fos); 31 int len = 0; 32 while ((len = bis.read()) != -1) { 33 bos.write(len); 34 } 35 bos.close(); 36 bis.close(); 37 System.out.println("使用缓冲流花费时间:"+(System.currentTimeMillis()-start)); 38 } 39 }
经测试:使用缓冲流比字节流速度要快的多。
注:如果在测试代码中都添加byte数组,则测试效果不明显。
二、缓冲字符流
1、字符缓冲输出流(BufferedWriter)
1 public static void main(String[] args) throws IOException { 2 /* 3 字符缓冲输出流使用步骤: 4 1:创建FileWrite对象,指定输出文件 5 2:创建BufferedWrite对象,对FileWrite进行“包装”,使其效率提高 6 3:使用BufferedWrite对象调用write方法,将数据写入内部缓冲区中 7 4:使用BufferedWrite对象调用flush方法,将内部缓冲区的数据刷新到文件中 8 5:释放资源(若释放资源,第4步flush可省略,因为在调用close时会先进行flush再释放资源) 9 */ 10 BufferedWriter bw = new BufferedWriter(new FileWriter("c.txt")); 11 for (int i = 0; i < 10; i++) { 12 bw.write("相信美好的事情即将发生..."); 13 bw.newLine(); 14 } 15 bw.flush(); 16 bw.close(); 17 }
2、字符缓冲输入流(BufferedReader)
1 public static void main(String[] args) throws IOException { 2 /* 3 字符缓冲输入流使用步骤: 4 1:创建FileReader对象,指定输出文件 5 2:创建BufferedReader对象,对FileReader进行“包装”,使其效率提高 6 3:使用BufferedReader对象调用read/readLine方法,将数据读入内部缓冲区中 7 4:释放资源 8 */ 9 10 // 方式一 11 /* 12 BufferedReader br = new BufferedReader(new FileReader("c.txt")); 13 String s = ""; 14 while ((s = br.readLine()) != null) { 15 System.out.println(s); 16 } 17 br.close(); 18 */ 19 20 // 方式二 21 BufferedReader br = new BufferedReader(new FileReader("c.txt")); 22 int len = 0; 23 while ((len = br.read()) != -1) { 24 System.out.print((char) len); 25 } 26 br.close(); 27 }
相关文章
- Windows电脑文件与苹果手机iPhone共享
- 做交互选B端还是C端?来看这篇亲历分析!
- 社交体验实战案例!亿万人在用的QQ群是如何做好设计的?
- 这份 iOS 15 推送通知设计指南,值得设计师们仔细阅读!
- 会被人肉?教你在QQ隐藏不想被人发现的小秘密
- iOS 15增强智能堆栈功能:可根据用户偏好自动调整小部件
- 苹果:不会强制用户从 iOS 14 升级到 iOS 15
- iOS 15中开发者能够更好掌控退款事宜
- Safari浏览器迎来标签页分组功能 iPhone与iPad支持扩展插件
- 数字人民币开始试运行,马云也支持,数字化货币或将成为未来趋势
- 苹果 iOS 15:没电关机或恢复出厂设置后,仍然可以“查找”到你的 iPhone
- iOS 15 只是一个更好看的 Linux 吗?
- 在Scrapy中如何利用Xpath选择器从网页中采集目标数据
- 苹果 iOS 15 正式发布:全新通知界面与 FaceTime,天气、照片、钱包大改进
- 淘宝突然崩了 官方回应
- 「算法与数据结构」带你看分治算法之美
- 如何在工作中使用 iPad 提高工作效率
- 5 分钟,带你快速撸一个 iOS App
- 创建自己的App Store美区ID
- 下周登场!iOS 15细节曝光:改进多任务、苹果新设计通知横幅