core I/O class plus all decorators Decorator design pattern,

一、输入(Input,Read):就是把别人送的东西弄回家。

      输入流:像水一样流动,是动态的,如果水流到家了,表示结束

                  计算机:表示流入的信息如果保存起来,就结束流入。     

        第一: 东西存放(来源)不一样,取的方法也不一样,因此建立几个基础类,得到数据。

                 现实例子:快递到了小区门口,有三种方法拿到手:

                         1>大门口有一台机器(来源1),快递人员发短信去取

                         2>快递送到楼下(来源2),直接取

                        3>小区有一个快递驿站(来源3),可以取。

                因此:我把东西从快递处拿回家的路上,就是输入流,表示包裹在流动,

                        我: 1》产生输入流

                             2》且带有包裹(数据)

                   所以java基础类:只提供数据,至于以什么方式取得数据,不用我们担心了。

               1>因此基础类InputStream:就是产生输入流,并取到数据。

               计算机存放数据的方式: 

           1>ByteArrayInputStream:表示从缓冲区直接读数据。               

               数据来源1:数据存放在缓冲区里

                   1》就是一个byte 数组,把数组直接转换输入流,这好像没有什么用

                 例子1:byte[] b1="qerwqtqtg".getBytes();
                          ByteArrayInputStream  b2=new ByteArrayInputStream(b1);                                                     

           2>字符串对象:java 1.0 StringBufferInputStream:对应字符串  现在改成  java1.1  StringReader

              (来源2) :数据存放在 String  对象中。

             数据来源1:从缓冲区中读数据放入StringReader中。

          MemoryInput.java

          import java.io.StringReader;
          public class MemoryInput {
           public static void main(String[] args) throws IOException {

             //BufferedInputFile.read("MemoryInput.java"):就是一个String 对象。
             StringReader in = new StringReader(BufferedInputFile.read("MemoryInput.java"));

               int c;
              while ((c = in.read()) != -1)
             System.out.print((char) c);
         }
       }              

          3>文件:FileInputStream:从各种文件读出信息,用得非常多

            (来源3) :数据存放在文件中;

         4>PipedInputStream:就像快递公司中转站,进来的包裹,马上送出去。

      第二:东西已经取回家了,直接放楼下的杂物间里,哪么拆开,按店主打好包的方式,分别搬回家!(这个应该和输出对应)出现了几个decorators 类,

              数据组合方式不一样:这些东西是木地板,一箱子太重(当时提醒店主3块,4块绑在一起,好搬),肯定弄不上去,怎么办?

                      拆开箱子,里面已经有3块,4块的木地板绑在一起, 所以直接搬上楼。                         

               数据组合类: DataInputStream,提供分成各种各样的组合的功能。

                      即一个数据可以有:几个int+几个double 等等 

                    1>8个2进制为一组,一个字节Byte----对应的方法readByte())

                    2>4个字节为一组,int-----------对应的方法

               等等。

            组合类的父类:FilterInputStream

             1>DataInputStream :现在已经有数据了,哪么

             例子1:把数据分成字节组,一个字节一个字节循环读出来。

               DataInputStream类:提供readByte();方法。            

    FormattedMemoryInput.java            

   package io;
   import java.io.ByteArrayInputStream;
   import java.io.DataInputStream;
   import java.io.EOFException;
import java.io.IOException;

public class FormattedMemoryInput {
public static void main(String[] args) throws IOException {
try {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(
BufferedInputFile.read("FormattedMemoryInput.java").getBytes()));
while (true)
System.out.print((char) in.readByte());
} catch (EOFException e) {
System.err.println("End of stream");
}
}
}

     2>BufferedInputStream :当input 基础类读入数据后,放入缓冲区中,当需要要数据时,从缓冲中取。


Decorator design pattern:就是核心类(取数据的基础类)+许多重新组合(decorators), 一层new()对象之后外面再套一层new,建立许多新对象。

         本来只有一个数据对象----对应建立很多对象,

          Bruce Eckel   says: the Java I/O library is awkward to use,呵呵!我也觉得,

二、输出(Output,Writer):就是把自己的东西给别人,产生输出流,让包裹流动起来。

        首先:

                  1>把数据重新组合,即打包(decorators类),即一个大数据可以由:int+double+byte+float 混合而成。

                 2>把东西放入缓冲中

                  3>然后用基础类把缓冲区的东西送出去。

        例如:家里搞装修,垃圾太多,买了15个能装50斤米的大蛇皮袋。

               1>首先把垃圾堆在一个小房间里,然后把垃圾装入蛇皮袋,(计算机无表示)

               2>叫了送垃圾的,人家一来觉得太重了,加点钱,人家也不弄。(这一步就是DataOutputStream)

                  只好重新买小蛇皮袋,垃圾重新组合(decorators类提供分成Byte,int组合),大约每袋10-20斤左右。           

               4>把要送出的垃圾放入小房间里(缓冲区 BufferedOutputStream)

               4>把垃圾送出去(这就是输出基础类:ByteArrayOutputStream,FileOutputStream)。

                 产生输出流

       第一:和外界打交道的类(即把自己的东西送出去)

                 1、ByteArrayOutputStream(送到缓冲区,必须设置缓冲区大小)

                 2、FileOutputStream(送到一个文件里)

     第二:分组类(decorators),分组类的父类:FilterOutputStream

三、Reader,InputStream ,都是输入,区别         

     InputStream :面向字节(byte-Oriented)的读入

     Reader:面向 character ,Unicode-compliant(2个字节编码,可以国际化),char-oriented

     character:字母+空格+标点符号+其它符号 等

     Unicode-compliant:全世界语言的编码。

     UTF-8:全世界语言的编码,Unicode升级版,

         比如对于美国佬的ASCII码只要8位就可以了,大大节省了空间,表示存贮信息时根据内容来定长度。

     char-oriented:is 16-bit Unicode

   编码:美国佬的8位2进制码是一个基本单位,基本上每个国家都有(8位ASCII码+自己国家语言的编码)。

            哪么:各个国家以8位为一个基本单位(0--127)不用,其它随便编,

                     但是,编之后,计算机软件能识别就可以了。

                              

                      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值