对输入流和输出流的一个例子辨析

对输入流和输出流的一个例子辨析
这里和我们一般编程中的输入输出流的使用不太一样,所以可能会导致误解。
这里首先初始化了一个输出流:注意到这里的使用:
dos是baos的装饰器,内部实现是委派baos

  1. 往dos里面写一个随机数和一个true,由于dos是baos的装饰器,实际上数据写进了baos(注意到这个“写入流中”的操作)
  2. 起一个读入器bais,用途是读baos的内容(已经用一个Byte数组存起来了,bais是读这个byte数组的输入流)
  3. 起一个dis包装bais,读dis实质上就是读bais
  4. 从dis里面读出浮点数和布尔量。
    (关于装饰器模式将在之后的博客里详细解释)。

这里有一点值得困惑的地方:既然我们说了 输出流是把内存(程序)中的数据输出到外设或其他地方,那么这里该怎么理解这种行为?

事实上,我们的随机数和true是在内存中产生,并且从内存向dos中“输出”,而dis则是向内存中输入,而System.out.println则是将内存中的dis输入的东西再次输出到屏幕上。

进一步的,如果我们去看API文档,我们会发现
out是System类中的一个静态常量,定义为:public static final PrintStream out
PrintStream继承FilterOutputStream
(也属于一种装饰类)
因此和我们的分析一致。