“一目十行”的RandomAccessFile类 | 带你学《Java语言高级特性》之六十三
在日常开发中,Java的标准包有时只能满足开发使用的最低标准,OutputStream便是如此。本节将为读者介绍针对OutputStream类进行自定义开发实现优化输出功能的方法。
【本节目标】
通过阅读本节内容,你将了解到OutputStream在输出操作方面有限的功能,了解到“装饰设计模式”的基本思想,学会通过对OutputStream类的定制完成对输出操作的优化。
打印流
如果要想通过程序实现内容的输出,核心的本质一定要依靠OutputStream类完成,但是OutputStream有一个很大的缺点:这个类的数据输出操作功能有限:public void write(byte[] b) throws IOException,所有的数据一定要转为字节数组后才能输出,假设现在项目里面可能输出的是long、double、Date,这种情况下就必须将这些数据变为字节的形式来处理,这样的处理一定是非常麻烦的,所以在开发之中最初的时候为了解决此类的重复操作,往往会由开发者自行定义一些功能类已简化输出过程。
范例:打印流设计思想
import java.io.File;
import java.io.FileOutputStream;
import java.io.Exception;
import java.io.OutputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator +"mldn.txt"); //定义操作文件
PrintUtil pu= new PrintUtil(new FileOutputStream(file));
pu.println("姓名:小强子");
pu.print("年龄:");
pu.println(78);
pu.close();
}
}
class PrintUtil implements AutoCloseable { //实现一些常用数据的输出
private OutputStream output; //不管现在如何进行输出操作,核心使用的就是OutputStream
public PrintUtil(OutputStream output) { //由外部来决定输出的位置
this.output = output;
}
@Override
public void close() throws Exception {
this.output.close();
}
public void print(String str) { //输出字符串
try {
this.output.write(str.getBytes()); //输出
} catch (IOException e) {
e.printStackTrace();
}
}
public void println(String str) {
this.print(str + "\r\n");
}
public void print(long num) {
this.print(String.valueOf(num));
}
public void println(long num) {
this.println(String.valueOf(num));
}
}
在整个操作过程之中打印流的设计思想的本质在于:提高已有类的功能,例如:OutputStream是唯一可实现输出的操作标准类,所以应该以其为核心根本,但是这个类的输出的操作功能有限,所以不方便进行输出各个数据类型,那么就为它做出了一层包装,所以此时采用的设计思想就是“装饰设计模式”。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学