I/O学习 --

来源:互联网 发布:美国地缘政治知乎 编辑:程序博客网 时间:2024/05/20 04:13
I/O:
    ————————>
        一开始,之后字节流,之后又添加了面向字符和基于Unicode的类,这其中,基于Unicode主要是用于国际化,之前只支持8位的字节流,而Unicode字符为16位,JAVA中的char字符也是16位的,之后再JDK1.4之后又引入了nio的概念,它的引入大大的提高了速度(不管你显不显示的用nio编写代码),因为,它使用的结构更接近于OS里面执行I/O的方式,通道和缓冲器,唯一和通道交互的缓冲器是ByteBuffer,也就是说只可以加工字节的缓冲器,但是没办法输出或者读取对象,即使是字符串也不行,但是nio中FileInputStream,FileOutputStream,RandomAccessFile这三个类被修改了用以产生FileChannel,里面有方法在通道中产生Reader和Writer.其中又涉及到装饰器,装饰器:使用分层对象来动态透明地向单个对象中添加责任,和混型类似,但是前者使用组合和形式化结构,后者基于继承实现的,它的缺陷在于对于装饰器,只能有效的工作在装饰中的最后一层,filter是所有装饰器类的基类
       A. 首先我们看到的是File这个类,他技能代表一个特定文件,又能代表一个目录。其中要注意List()(返回一个String []),带参不带参,两种方法,带参的话,带一个过滤器,FilenameFileter接口的话,里面会有accept()方法,对此目录下每个文件名调用accept(),返回boolean,还涉及到正则表达式,复杂,没弄太明白,就是
                              Pattern p = Pattern.compile("a*b");
                                          Matcher m = p.matcher("aaaaab");
                                          boolean b = m.matches();
 又涉及到匿名内部类,就要注意,在内部类调用外部对象数据的时候,数据要定义为final,
        B.输入,输出:
            a. InputStream:ByteArrayInputStream                    OutputStream:ByteArrayOutputStram
                                  StringBufferInputStream                                           FileOutputStream
                         FileInputStream                                                     PipedOutputStream
                        PipedInputStream                                                     FilterOutputStream
                        SequenceInputStream
                        FilterInputStream
           
                      1.FilterInputStream:中又包含DataInputStream,BufferedInputStream,还有两个用作编译器中,这些用来从InputStream中读出数据
                      2. FilterOutputStream:中又包含DataOutputStream,PrintStream,BufferedOutputStream,用来向OutputStream中写入
           b.InputStream,OutputStream和Reader,Writer是两个不同的继承层次,前者为字节流,后者为字符流,而“适配器”类,InputStreamReader和OutputStreamWriter分别可以把InputStream和OutputStream转化为Reader和Writer!
        C.RandomAccessFile使用于由大小已知的记录组成的文件,和之前的两个继承层次没有关系,其次只有RandomAccessFile支持搜寻方法,并且只使用于文件
        D.对象序列化:就是要对象能够在程序不运行的情况下仍能保存信息,不随着程序结束而它的生命周期结束,具体内容就是将那些实现了Serializable接口(该接口知识一个标记接口,没有任何方法)的对象转换成一个字节序列,并能够将这个字节序列恢复成原本的对象,其实把信息写入文件或者数据库也能达到同样的效果,主要是为了支持两种特性
                1.JAVA的远程方法调用(RMI),向远程对象发送消息时,需要通过对象序列化来传输参数和返回值
                2.对JAVA Beans,在设计阶段对一个Beans的状态信息进行配置,这种状态必须保存下来,在程序启动时进行后期恢复
原创粉丝点击