• java io


    IO流实现的目标就是从程序外(文件,网路等)读取数据到程序中以及从程序中输出数据到程序外。然而我们经常用到的IO流往往不止于这两个,比如inputstream,outputstream,fileinputstream,fileoutputstream,bufferedinputstream,bufferedoutputstream,writer,reader,printwriter,bufferedreader等等。IO流可以分成两类,一类是字节流(其传输时以二进制形式进行,字节流包括各种stream),一类是字符流(其传输时是以字符的形式进行的,字符流包括各种writer、reader)。在这里,就有一个很重要的知识点——装饰者模式。

    装饰者模式在Java中经常会用到的一种思想,也体现了java作为面向对象的特性。我们可以这样认为,在IO流中,inputstream和outputstream是父类,其他的包括fileinputstream,fileoutputstream等都是通过继承inputstream和outputstream两个之中的一个然后再扩展出其他功能,比如说bufferedinputstream,这其实也就是在继承inputstream的基础上通过增加一个缓冲区buffer扩展而来的。在这里,我还想用一个简单的例子说明一下装饰者模式,比如说一个学校里有学生和老师,假定说学生的作用就是studying,老师的作用就是teaching,现在我们想要给老师或者学生增加一些功能,比如说学习什么课程,教什么课程,我们就可以定义另外的两个类,分别继承学生类,老师类,然后再这两个类中对他们的作用进行扩展,将其改成studying programming和teaching programming。从这个例子中,我们可以看到fileinputstream正是在inputstream的基础上增加和file相关联的功能,也正是因为这样,fileinputstream在实例化的时候要传入一个file对象。 通过装饰者模式,我们可以学到一种理解和学习IO流中其他流的作用和运用。

    首先我为大家介绍关于inputstream,outputstream,fileinputstream,fileoutputstream,bufferedinputstream,bufferedoutputstream。 

    inputstream和outputstream:这两个相当于两个管道,你可以往inputstream里面的read方法读出数据(read方法返回读出到数据的长度,如果文件里面没有内容,则返回-1.并且可以再read方法中传入一个byte类型的变量接收读取到的数据),也可以使用outputstream的writ方法往outputstream写入数据,这两个方法都是传入byte类型的数据(write方法是void类型,不返回任何值。其需要传入byte类型的数据,可使用string的getbytes方法)。然而,如果我们不把这两个管道连接到source和target上,它们可以说是无意义的,不能被实例化的。

    fileinputstream和fileoutputstream:顾名思义,这两个类是用来从文档中读出数据到程序(fileinputstream)以及从程序中写入数据到文档(fileoutputstream),因此,在实例化这两个函数的时候,我们需要传入一个file对象,同时fileoutputstream在实例化的过程中传入一个不存在的文件时,系统将会为你自动新建,并且fileoutputstream还可以在file对象的参数后传入一个boolean类型的参数,表示是否从源文件的末尾写入数据,若为true,则数据将写入到源文件的后面,否则,源文件将会被删除后从头开始写入数据。

    bufferedinputstream和bufferedoutputstream:这两个类是在inputstream和outputstream的基础上增加了一个buffer的缓冲区,从而使数据不直接写入到流中,而是先写入buffer然后再一次性flush到流中,相信对于大多数人来说,不难理解bufferedinputstream和bufferedoutputstream的性能会有很大的提高。bufferedinputstream和bufferedoutputstream可以传入inputstream和outputstream类型的参数,这就意味着fileinputstream和fileoutputstream也可以作为其参数传入,这就相当于用了两层装饰者模式,在fileinputstream和fileoutputstream的基础上又增加了buffer的功能。bufferedoutputstream有多另外一个函数就是flush,也就是把写入的数据从缓冲区中释放到流里面,否则写入的数据将会等到缓冲区满了的时候再释放到流里面。

    接下来是第二部分, 也是我们在IO编程中很经常使用到的,writer,reader,inputstreamreader,outputstreamwriter,printwriter,bufferedreader。

    inputstreamreader和outputstreamwriter是writer和reader与stream之间的桥梁,他们可以把一个stream对象转化成一个reader或者writer对象。因此他们需要传入的对象为inputstream或者outputstream然而却返回一个writer或者reader对象。其方法与writer和reader一致。

    因此,writer的write方法能够传入char数组或者string类型的数据,而reader的read方式能返回char类型的长度(若空则返回-1),并可以传入一个char数据做为参数接收读取的数据。

  • 相关阅读:
    查询数据库锁的SQL
    注解学习实例(模拟hibernate,table,column注解,拼装SQL)
    mongoDB学习笔记
    拼装SQL.例子
    MySQL实现类似Oracle序列的函数
    面试总结
    linux下常用命令
    PHP 中 flush() 与 ob_flush() 的区别
    PHP 使用共享内存的资料
    移动设备的web站开发和将web封转成移动端应用的一些资料
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5971294.html
Copyright © 2020-2023  润新知