唉,终于搞懂IO输入与输出到底是什么了,说起真有点惭愧。输入(InputStream)程序连续读取字节的对象,比如说把硬盘上的数据读到内存里;输出(OutputStream)程序可以向其中连续写入字节的对象,简单说就是把内存缓冲区中数据搬到硬盘上。还有那些什么流什么流的。现在都还有点混乱,看来要在头脑清醒的时候在看一遍了。尤其是这个视频07年录制的,看起来好犯困,窗口小小的,一句代码都显示不完,暂停好几次才晓得写的是什么。下面贴一些自己在看视频时候做的笔记,嘿嘿,都忘了日记怎么写了。莫见怪…
理解流的概念:
流是字节序列的抽象概念,又分节点流(直接对目标进行操作)和过滤流(处理流)两大类。文件是数据的静态存储形式,而流是指数据传输是的形态。流提供了IO设备中读写功能。
IO缓冲区:提高整个计算机的效率,但会降低单个应用程序效率。在网络缓冲区中有可能会照成数据的滞后,降低了实施性的效率。
FileInputStream 和FileOutputStream(分别是InputStream和OutputStream的子类)分别用来创建磁盘文件的输入流和输出流对象,通过他们的构造函数来指定文件路径和文件名。其中FileInputStream指定的文件必须是存在与可读,OutputStream 不存在就创建,存在则覆盖,但不能指定一个已经被其他程序打开的文件。
包装类的概念与作用
DataOutputStream包装类将其他类型的数据转换成字节数组用,调用输出流对象的字节方法,写入到体输出流中。
包装类输出流:
程序à包装类à节点流类à目标
包装类输入流:
目标à节点流类à包装类à程序
DataOutputStream 类提供了往各种输出流对象中写入各种类型的数据的方法:传递一个fileOutputStream 输出流对象给DataOutputStream实例对象调用。
BufferedInputStream与BufferedOutputStream
是JAVA提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区,他们都会在自己的实例对象中创建缓冲区。增加缓冲区有两个基本目的,一是允许JAVA城市依次不知操作一个自己字节,提高程序性能;二有了缓冲区就可以对流进行skip、mark、reset方法操作。
ObjectInputStream和ObjectOutputStream两个包装类,用于从底层输入流中读取对象类型的数据和将对象类型写入到底层输出流。
Decorator设计模式
在程序中用一个对象(the Decorator)包装另外的一个对象,称之为Decorator模式。
小例子:
public static void main(String[] args) {
try {
throw new Exception("error");
} catch (Exception e) {
//字符串和输出流的桥梁StringWriter
StringWriter sw = new StringWriter();
//创建输出流并包装writer对象
PrintWriter pw = new PrintWriter(sw);
//参数传递
e.printStackTrace(pw);
//打印异常的详细信息
System.out.println(sw.toString());
}
}