【Java之IO】2.缓冲区
来源:互联网 发布:阿里云cdn怎么收费 编辑:程序博客网 时间:2024/06/06 19:05
缓冲区提高对数据的读写效率
一、字符流缓冲
- BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、字符串、数组的高效写入。
- 提供newLine()方法,使用平台自己的换行符概念
- 提高流的效率,所以需要接收流对象
- BufferedReader:可以按行读readLine()
//BufferedWriterpublic class Demo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("Demo(1).txt"); BufferedWriter bufw = new BufferedWriter(fw); for (int i = 0; i < 3; i++) { bufw.write("12345");//数据存在缓冲区 bufw.newLine(); } bufw.flush();//将数据写入到目的地 fw.close();//关闭缓冲区就已经关闭了流对象 }}//BufferedReaderpublic class Demo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("Demo(1).txt"); BufferedReader bufr = new BufferedReader(fr); String line = null; while ((line = bufr.readLine()) != null) { sopl(line); } fr.close(); }}
二、字节流缓冲
- BufferedInputStream
- BufferedOutputStream
public class Demo { public static void main(String[] args) throws IOException { FileInputStream fip = new FileInputStream("E:\\BaiduYunDownload\\JAVA\\IO\\08_PrintIO.avi"); BufferedInputStream bf = new BufferedInputStream(fip); FileOutputStream fop = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\08.avi"); BufferedOutputStream bp = new BufferedOutputStream(fop); //建议使用这种方式 int ch = 0; while((ch = bf.read()) != -1) { bp.write(ch);//字节流直接写入目的地,不需要刷新 } bf.close(); bp.close(); }}
三、自定义缓冲区
//自定义的读取缓冲区,模拟BufferedReader/* * 分析: * 缓冲区中无非就是封装了一个数组 * 并对外提供了更多的方法对数组进行访问 * 其实这些方法最终操作的都是数组的角标 * * 缓冲的原理: * 就是从源中获取一批数据送到缓冲区 * 再从缓冲区中不断的取出一个一个数据 * 在取完后,继续从源中获取一批数据送到缓冲区,当源中数据取光时,用-1作为结束标记 */public class Demo { private FileReader r; //定义一个数组作为缓冲区 char[] c = new char[1024]; //定义一个角标指针 int p = 0; //定义计数器 int count = 0; Demo(FileReader r) { this.r = r; } public int myRead() throws IOException { if(count == 0) { count = r.read(c); p = 0; } if(count < 0) { return -1; } int ch = c[p++]; count--; return ch; } public String myReadLine() throws IOException { StringBuilder b = new StringBuilder(); int ch = 0; while((ch = myRead()) != -1) { if(ch == '\r') continue; if(ch == '\n') return b.toString(); b.append((char)ch); } if(b.length() != 0) {//判断缓冲区里面是否还有数据 return b.toString(); } //存完返回空 return null; } public void myClose() throws IOException { r.close(); } public static void main(String[] args) throws IOException { FileReader r = new FileReader("Demo(1).txt"); Demo d = new Demo(r); String line = null; while((line = d.myReadLine()) != null) { sopl(line); } d.myClose(); }}
0 0
- 【Java之IO】2.缓冲区
- java IO 字符流之 Buffered缓冲区
- java io 学习之三 字符流的缓冲区
- Java基础IO之二字符流缓冲区类
- Java IO 字符缓冲区Buffered
- java io 缓冲区 MP3复制
- Java IO 字符流 缓冲区
- Java IO 自己实现缓冲区
- Java NIO 之缓冲区
- Java NIO 之缓冲区
- io的学习之六-----缓冲区
- 后台开发之IO缓冲区管理
- java 新io——缓冲区
- Java技术IO流的缓冲区技术
- JAVA,IO性能优化——缓冲区
- JAVA IO缓冲区(BufferedWriter 和 BufferedReader)
- java--IO流缓冲区,装饰设计模式
- java IO 二(字符流缓冲区)
- android6.0系统Healthd深入分析
- 关于EOF的几个问题
- HDU 5550 Game Rooms (dp)
- HTML+CSS学习路线
- centos7 安装 mariadb(mysq的一种) 的正确命令
- 【Java之IO】2.缓冲区
- Android之Intent
- JavaScript的运行机制Event Loop(事件循环)
- SON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON
- mysql备份、恢复数据库的方法
- Help Hanzo LightOJ
- React native 常见错误:unable to resolve module react-native-scrollable-tab-view
- 日期格式化DateTransformer
- 安卓调用系统图库实现