黑马程序员——IO流(字符流、包装设计模式)
来源:互联网 发布:外汇决策软件 编辑:程序博客网 时间:2024/05/22 15:33
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
IO流(BufferedWriter)
字符流的缓冲区:
对应类
BufferedWriter
BufferedReader
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。
类BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。
特殊方法:
跨平台换行符。
void newLine() 写入一个行分隔符。
BufferedReader:
String readLine()
读取一个文本行。
返回:包含该行内容的字符串,不包含任何行终止符,如果已达到流末尾,则返回null。
/* 字符读取流缓冲区: 该缓冲区提供了一个一次读一行的方法readLine,方便与对文本数据的获取。 当返回null时,表示读到文件末尾。 */import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class BufferedReaderDemo {public static void main(String[] args) throws IOException {//创建一个读取流对象和文件相关联。FileReader fr = new FileReader(".\\src\\BufferedReaderDemo.java");//为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。BufferedReader bufr = new BufferedReader(fr);String line = null;while((line=bufr.readLine())!=null)System.out.println(line);bufr.close();}}
练习:
通过缓冲区复制一个.java文件。
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyTextByBuf {public static void main(String[] args) {FileReader fr =null;BufferedReader br=null;FileWriter fw = null;BufferedWriter bw=null;try {fr = new FileReader(".\\src\\CopyTextByBuf.java");br = new BufferedReader(fr);fw = new FileWriter("CopyTextByBuf.java");bw = new BufferedWriter(fw);String frstr ;while((frstr=br.readLine())!=null){bw.write(frstr+System.lineSeparator());//bw.newLine();bw.flush();System.out.print(frstr+System.lineSeparator());}} catch (IOException e) {throw new RuntimeException("读写失败");}finally{try {if(br!=null)br.close();} catch (IOException e) {throw new RuntimeException("读关闭失败");}try {if(bw!=null)bw.close();} catch (IOException e) {throw new RuntimeException("写关闭失败");}}}}//readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。//readLine方法的原理//无论是读一行,获取多个字符。其最终都是在硬盘上一个一个读取。//所以最终使用的还是read方法,一次读一个的方法。//明白了BufferedReader类中特有方法readLine的原理后,//可以自定义一个类中包含一个功能和readLine一致的方法。//<strong>来模拟一下BufferedReader。</strong>
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
例子:
class Person{public void chifan(){System.out.println("吃饭");}}//增强吃饭功能class SuperPerson{private Person p;SuperPerson(Person p){this.p=p;}public void superChifan(){System.out.println("开胃酒");p.chifan();}}public class PersonDemo {public static void main(String[] args) {Person p = new Person();SuperPerson sp = new SuperPerson(p);sp.superChifan();}}
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
装饰和继承的区别:
MyReader//专门用于读取数据的对象。
|——MyTextReader
|——MyBufferTextReader
|——MyMediaReader
|——MyBufferMediaReader
|——MyDataReader
|——MyBufferDataReader
利用装饰设计模式进行优化:
class MyBufferReader extends Myreader
{
private MyReader mr;
MyBufferReader(MyReader mr)
{
this.mr = mr;
}
}
优化后的体系:
MyReader//专门用于读取数据的对象。
|——MyTextReader
|——MyMediaReader
|——MyDataReader
|——MyBufferDataReader
装饰模式比继承要灵活。避免了继承体系的臃肿。
而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能。
所以装饰类和被装饰类通常是都属于一个体系中。
练习:将myBufferedReader变成Reader的子类。
BufferReader的子类:
LineNumberReader 跟踪行号的缓冲字符输出流。 也是一个包装类。
其中含有两个方法:
setLineNumber和getLineNumber。设置行号和获取行号。
//练习:模拟一个带行号的缓冲区对象。
import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.Reader;class MyLineNumberReader extends BufferedReader{private int n ;public MyLineNumberReader(Reader in) {super(in);n=0;}public int getLine(){return n;}public void setLine(int n){this.n = n;}public String readLine() throws IOException{n++;return super.readLine();}}public class MyLineNumberReaderDemo {public static void main(String[] args) throws IOException {MyLineNumberReader mr = null;mr=new MyLineNumberReader(new FileReader(".\\src\\MyLineNumberReaderDemo.java"));String str = null;while((str = mr.readLine())!=null){System.out.print(mr.getLine()+str+System.lineSeparator());}mr.close();}}
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
- 黑马程序员——IO流(字符流、包装设计模式)
- 黑马程序员——IO(二)--流包装类、字符编码、Properties
- 黑马程序员——装饰设计模式(io流)
- 黑马程序员——IO流-字符流&装饰设计模式
- 黑马程序员——IO字符流
- 黑马程序员 io中的缓冲字符流,装饰设计模式(毕向东)
- 黑马程序员——io流(一)字符流
- 黑马程序员——38,IO流(字符流)
- 黑马程序员——IO流(字符流)
- 黑马程序员—IO流(字符流)
- 黑马程序员_温习 IO流一 (个人笔记) 简要(IO介绍。。字符流。。字符流缓冲区..装饰设计模式)
- 黑马程序员-------IO流(字符流)
- 黑马程序员_java的IO流(对第十九课字符缓冲区及装饰设计模式的总结)
- 黑马程序员——IO流(IO流、字节流、字符流)
- 黑马程序员——IO流-字节流、字符流
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- 黑马程序员—IO流(字符流与字节流)
- 黑马程序员——IO字符流与字节流
- 【2012河南省队互测】【COGS930】找第k小的数
- 基础练习 十进制转十六进制
- 你的团队里没有DevOps文化?
- 在mfc c++ 以及opencv 编写程序当中,很多常用的类型转换
- block使用小结、在arc中使用block、如何防止循环引用
- 黑马程序员——IO流(字符流、包装设计模式)
- 一些可以会的软件使用
- Best Time to Buy and Sell Stock IV
- 清单革命:为什么不仅是工具革命?
- Java - 多态、动态绑定、抽象类和访问修饰符
- UVA - 12299 RMQ with Shifts 线段树(点修改)
- hdoj 1162 Eddy's picture(最小生成树)
- 深信服VMP 内存分配一点看法
- Android开源框架之androidannotations