- 浏览: 1572752 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
BufferedWriter
BufferedReader
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * IO中 字符流的缓冲技术 * 1)缓冲区的出现提高了对数据的读写效率. * 2)对应类. * BufferedWriter * BufferedReader * 3)缓冲区要结合流才可以使用. * 4)在流的基础上对流的功能进行了增强. * * * 缓冲区的出现是为了提高流的操作效率而出现的. * 所以在创建缓存区之前,必须要先有流对象. * * 该缓冲区中 提供了一个跨平台的换行符.newLine(); */ public class BufferedWriterDemo { public static void main(String[] args) throws IOException { //创建一个字符写入流对象 FileWriter fw=new FileWriter("buf.txt"); //为了提高字符写入流的效率,加入缓存技术. //只要将需要提高效率的流对象作为参数传递给缓冲区的构造函数即可 BufferedWriter bufw=new BufferedWriter(fw); bufw.write("ab\r\ncde"); bufw.newLine();// 换行 window:\r\n linux:\n for(int x=0;x<5;x++){ bufw.write("abc"+x); bufw.newLine(); //自动换行方法 bufw.flush(); //必须要刷新, 如果不小心停电了 ,这样不会丢失数据 } //记住只要用到缓冲区 ,就要记得刷行. bufw.flush(); //其实关闭缓冲区,就是关闭缓冲区中的流对象 bufw.close(); //这句不用写了 //fw.close(); } }
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 读取缓冲区 * 该缓冲区提供了一个一次读取一行的方法 readLine,(但不包含行终止符号.即不会换行,这是有效文本)方便对文本数据的获取. * readLine():只返回回车符好之前的数据内容,并不返回回车符号 * 当返回null 表示读取到了文件的末尾 */ public class BufferedReaderDemo { public static void main(String[] args) throws IOException { //创建一个读取流对象和文件相关联. FileReader fr=new FileReader("buf.txt"); //为了提高效率,加入缓冲技术 //将字符读取流对象作为参数传递给缓冲对象的构造函数 BufferedReader bufr=new BufferedReader(fr); /*String s1=bufr.readLine(); //提供的读取一行 System.out.println("s1:"+s1); */ String line=null; while((line=bufr.readLine())!=null){ System.out.println(line); } bufr.close(); } }
自定义BufferedReader模拟里面的功能
import java.io.FileReader; import java.io.IOException; /** * 明白了BufferedReader类中的特有方法,readLine的原理后 * 可以自定义一个类中包含一个功能和readLine一致的方法. */ public class MyBufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java"); MyBufferedReader mbufr=new MyBufferedReader(fr); String line=null; while((line=mbufr.myReaderLine())!=null){ System.out.println(line); } mbufr.myClose(); } } //装饰设计模式 模拟 BufferedReader 对 read() class MyBufferedReader{ private FileReader fr; MyBufferedReader(FileReader fr){ this.fr=fr; } //可以一次读一行的方法. public String myReaderLine() throws IOException{ //定义一个临时的容器,原BufferedReader封装的是一个字符数组 //为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串. StringBuilder sb=new StringBuilder(); int ch=0; while((ch=fr.read())!=-1){ if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) //如果最后一行没有 \n 会丢失最后一行 return sb.toString(); return null; } public void myClose() throws IOException{ fr.close(); } }
MyBufferedReader1的升级完善
import java.io.FileReader; import java.io.IOException; import java.io.Reader; /** * 明白了BufferedReader类中的特有方法,readLine的原理后 * 可以自定义一个类中包含一个功能和readLine一致的方法. */ public class MyBufferedReaderDemo1 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java"); MyBufferedReader1 mbufr=new MyBufferedReader1(fr); String line=null; while((line=mbufr.myReaderLine())!=null){ System.out.println(line); } mbufr.close(); } } //装饰设计模式 模拟 的完善 class MyBufferedReader1 extends Reader{ //现在只能对FileReader进行装饰 //private FileReader fr; //这样我们就可以对 Reader 这样 一组类进行 装饰了 private Reader fr; //MyBufferedReader1(FileReader fr){ MyBufferedReader1(Reader fr){ this.fr=fr; } //可以一次读一行的方法. public String myReaderLine() throws IOException{ //定义一个临时的容器,原BufferedReader封装的是一个字符数组 //为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串. StringBuilder sb=new StringBuilder(); int ch=0; while((ch=fr.read())!=-1){ if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) //如果最后一行没有 \n 会丢失最后一行 return sb.toString(); return null; } //复写 Reader中的close public void close() throws IOException{ fr.close(); } //复写 Reader中的read public int read(char[] cbuf, int off, int len) throws IOException { // TODO Auto-generated method stub return fr.read(cbuf, off, len); } }
装饰上设计模式
/** * 装饰设计模式: * 当想对已有的对象进行功能增强时候 * 可以定义类,将已有对象传入,基于已有的功能,并提供加强功能. * 那么自定义的该类称为"装饰类" * * 装饰类通常会通过构造方法接受被装饰的对象. * 并基于被装饰的对象功能提供更强的功能. * * * 装饰类和 继承 的区别 * MyReader //专门用户读取数据的类 * |--myTextReader * |--myMediaReader * * 一年后,发现 以上的读取速度有点慢,想到了缓冲技术 * MyReader //专门用户读取数据的类 * |--myTextReader * |--MyBufferTextReader * |--myMediaReader * |--MyMediaReader * * 一年后 出现了新的数据类型 * MyReader //专门用户读取数据的类 * |--myTextReader * |--MyBufferTextReader * |--myMediaReader * |--MyBufferMediaReader * |--MyDataReader * |--myBufferDataReader * * 既然上面使用的缓冲技术都是同一种技术,这样发现上面的结构 都比较 臃肿 * * class MyBufferReader{ * myBufferTextReader(myTextReader r){ * * } * myBufferMediaReader(myMediaReader r){ * * } * myBufferDataReader(myDataReader r){ * * } * } * * 又发现以上的类的扩展性极差 * 找到其参数的共同类型,通过多态的形式,可以提高扩展性 * * class MyBufferReader extends MyReader{ * * MyReader r; //组合结构 * MyBufferReader(MyReader r){ * this.r=r; * } * * public void myBufferReader(){ * //缓存操作 * } * } * * //最后的结构是 * MyReader //专门用户读取数据的类 * |--myTextReader * |--myMediaReader * |--myDataReader * |--myBufferReader * * 总结: * 装饰类比继承跟灵活,避免了继承体系的臃肿 * 而且降低了类和类之间的关系. * 装饰类因为增强已有兑对象,具备的功能和已有的是相同的,只不过是提供更强大的功能 * 所以装饰类 和被装饰类通常都属于一个体系. * 由以前的继承结构 -->变成了 -->组合结构 * */ public class DecorationDemo { public static void main(String[] args) { Person p=new Person(); p.chifan(); //以前吃饭是这样的 System.out.println("========生活富裕了=========="); SuperPerson sp=new SuperPerson(p); sp.superChifan(); } } class Person{ public void chifan(){ System.out.println("吃饭"); } } class SuperPerson{ Person p; SuperPerson(Person p){ this.p=p; } //后来人升级了, 吃饭的方法也不同了. public void superChifan(){ System.out.println("喝汤"); System.out.println("开胃酒"); p.chifan(); System.out.println("甜点"); System.out.println("来一根"); } }
通过缓冲区复制一个.java文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 通过缓冲区复制一个.java文件 */ public class CopyTextByBuf { public static void main(String[] args) { BufferedReader bufr=null; BufferedWriter bufw=null; try { bufr=new BufferedReader(new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day18\\SystemDemo.java")); bufw=new BufferedWriter(new FileWriter("bufWriter_copy.txt")); String line=null; //这就变成了中转站 替换了 char[] while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } } catch (Exception e) { e.printStackTrace(); //读写失败 }finally{ if(bufr!=null) try{ bufr.close(); }catch(IOException e){ throw new RuntimeException("读取关闭失败"); } if(bufw!=null) try{ bufw.close(); }catch (IOException e) { throw new RuntimeException("写入关闭失败"); } } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 944public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2228经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5594package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 913import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1019/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 954//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1783更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1370import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 779import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2365import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 879// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1130import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 765import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1110import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3845import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 926/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 977import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1799Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 965/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2175package out; import ja ...
相关推荐
利用缓冲区提高Java应用程序的IO性能
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...
Java教程之javaIO详解Java教程之javaIO详解Java教程之javaIO详解
主要介绍了Java IO字符流缓冲区实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
JavaIO实例,包括:字节流、字符流、缓冲流、转换流
java基础之IO流,基础简介知识,帮助你了解java的io技术
Java IO字符流和字节流,讲述了字符传输流和字节传输流的不同和作用
彻底明白Java的IO系统---java之精髓IO流
javaIO流javaIO流
IO流 javaio java 流
IO实现本地序列化和反序列化,面向对象,集合等
主要介绍了Java IO流之字符缓冲流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java中的标准IO方法,详尽的java io操作,io学习必不可少的资料。
LINUX IO的操作文档,能直接下载到嵌入式开发板 上,直接字符型操作
java零基础自学 之 JavaIO流处理java零基础自学 之 JavaIO流处理
java IO文档java IO文档java IO文档java IO文档java IO文档java IO文档
Java,彻底明白Java语言中的IO系统 Java,彻底明白Java语言中的IO系统 java基础知识
java之io流实例应用。
JAVA课件Java IO.ppt详细了解JAVA