JAVA高级应用之装饰者模式 LineNumberReader 打印流
2018-02-02 20:16
405 查看
装饰者模式
思想:可以通过装饰 对原来的功能进行升级 BufferedOutputStream 需要OutputStream参数进行构造 可以是FileOutputStream 相当于装饰后 功能得到提升 写入效率提高 ObjectOutputStream 需要OutputStream参数进行构造 可以是FileOutputStream 装饰后 功能提升了,可以写对象了 装饰者模式流程 1.把被装饰者写成成员变量 2.构造方法中 给该成员变量赋值 3.对原有功能升级 装饰者模式的好处: 高内聚(类中方法直接的联系--联系最好紧密) 低耦合(解耦)(类与类直接尽量不要产生联系)
代码示例
package com.lanou3g.o03; public class Demo06 { public static void main(String[] args) { MyStudent myStudent = new MyStudent(new Student1()); myStudent.code(); } } interface Coder{ public abstract void code(); } class Student1 implements Coder{ @Override public void code() { // TODO Auto-generated method stub System.out.println("会c语言"); System.out.println("会c++语言"); System.out.println("会c#语言"); } } class MyStudent implements Coder{ private Student1 student; public MyStudent() { } public MyStudent(Student1 student) { this.student = student; } @Override public void code() { // TODO Auto-generated method stub student.code(); System.out.println("会java"); System.out.println("会js"); System.out.println("会query"); } }
LineNumberReader
构造方法 LineNumberReader(Reader in) 参数为reader类的子类 比如FileReader BufferedReader 普通方法: int getLineNumber() 获得当前行号 String readLine() 读取文本行 void setLineNumber(int lineNumber) 设置当前行号
代码示例
package com.lanou3g.o03; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; import javax.annotation.processing.Filer; public class Demo07 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("/Users/lanou/Desktop/test3/ppp.txt"); LineNumberReader lnr = new LineNumberReader(fr); String string = ""; while((string = lnr.readLine()) != null) { int number = lnr.getLineNumber(); System.out.println(number + string); } lnr.close(); } }
底层实现LineNumberReader()
package com.lanou3g.o03; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class Demo08 { public static void main(String[] args) throws IOException { FileReader fis = new FileReader("/Users/lanou/Desktop/test3/ppp.txt"); MyLineNumber myLineNumber = new MyLineNumber(fis); String string = ""; myLineNumber.setNum(100); while((string = myLineNumber.readLine1()) != null) { System.out.println(myLineNumber.getNum() + string); } myLineNumber.MyClose(); } } class MyLineNumber{ private Reader reader; int num = 0; public MyLineNumber() { } public MyLineNumber(Reader reader) { this.reader = reader; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String readLine1() throws IOException { StringBuilder sBuilder = new StringBuilder(); num++; int len = 0; while((len = reader.read()) != -1) { if(len == 10) { return sBuilder.toString(); }else { sBuilder.append((char)len); } } if(sBuilder.length() == 0) { return null; } return sBuilder.toString(); } public void MyClose() throws IOException { reader.close(); } }
打印流(只能输出)
PrintStream(字节输出流) 构造方法可接收的参数: 1.文件(File) 2.字节输出流(OutputStream) 3.文件路径 PrintWriter(字符) 1.只能作为数据的目的地 2.可以把数据原样输出 3.永远不会抛出IO异常 但是可以抛出其它异常 如空指针异常 4.打印流相当于给其它的流对象 装饰了一个原样输出的功能 System.in 是 BufferedInputStream 缓冲输入字节 b27f 流 作用:接收键盘输入内容 Sytem.out 是 PrintStream 打印输出字节流 作用:输出内容到控制台
代码示例1:
public static void fun1() throws FileNotFoundException { // 创建文件 File file = new File("/Users/lanou/Desktop/test/kkk.txt"); // 创建缓冲字节输出流 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); // 创建一个打印字节流 PrintStream ps = new PrintStream(bos); // 写数据 ps.println("网卡了"); ps.println(true); ps.print(100); ps.write(100); ps.print('b'); // 关闭资源 ps.close(); } }
代码示例2:
public static void fun2() throws FileNotFoundException { // 打印字符流 File file = new File("/Users/lanou/Desktop/test/kkk.txt"); PrintWriter pw = new PrintWriter(file); pw.print("haha"); pw.println(200); pw.println(false); // 刷新 pw.flush(); pw.close(); }
代码示例3
package com.lanou3g.o03; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.io.PrintWriter; public class Demo09 { public static void main(String[] args) throws IOException { InputStream in = System.in; StringBuilder sBuilder = new StringBuilder(); while(true) { if(sBuilder.toString().endsWith("quit")) { break; } int len = 0; if((len = in.read())!= 10 ) { sBuilder.append((char)len); }else { System.out.println(sBuilder.toString()); } } } }
相关文章推荐
- Java之打印流、装饰者模式以及LineNumberReader的使用
- Java装饰者模式(设计模式)与缓冲字符输入流(LineNumberReader)和打印流
- Java中的装饰者模式、LineNumberReader、打印流(基础解析)
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
- Java学习日志(19-2-IO流-装饰设计模式与LineNumberReader)
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- 黑马程序员-JAVA高级视频_IO输入与输出-19天-6(LineNumberReader与自定义LineNumberReader)
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
- java io 装饰者模式的应用
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
- JAVA——LineNumberReader
- Java IO LineNumberReader
- JDBC高级应用 - DAO模式与JavaBean
- 装饰者模式在Java I/O中的应用
- Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例
- Java基础知识强化之IO流笔记54:IO流练习之 LineNumberReader的特有的功能使用
- Java基础----LineNumberReader
- 装饰设计模式、LineNumberReader