黑马程序员——java IO流

java中,IO流需要操作系统资源,使用完毕后要释放资源。

IO流根据操作的数据的类型的不同,可以分为字节流和字符流,

字符流是基于字节流的。

字符流的顶层基类是Reader和Writer

字节流的顶层基类是InputStream和OutputStream

流是用来操作数据的,数据的最常见形式是文件,字符流针对的是文本文件,字节流针对的是二进制文件(如图片文件)。

1.FileWriter是Writer的一个子类,创建FileWriter对象后,如果源文件不存在则创建新文件;如果源文件存在则覆盖

FileWriter有一个重载的构造函数,指定当往文件中写入数据时,是覆盖原数据还是追加数据,如果传入true则追加数据

其write()方法是把数据写入流中,只有执行了flush()方法后,才能把数据添加到文件。

close()方法,在关闭资源之前也会执行flush()方法。

2.FileReader是Reader的一个子类,其read()方法每次读取一个字符,当读到末尾时返回-1;第二种读取方式是给read()方法

  传入一个字符数组,返回独到的字符个数,当读到末尾时返回-1

3.IO流中的缓冲区是为了提高流的操作效率的。当关闭缓冲区时,也就关闭了其所缓冲的流对象

   (1)bufferedWriter

      使用方式:只要将要提高效率的流对象作为参数传递给缓冲区的构造函数即可。

        也要执行flush()或者close()方法,才能把数据谢大目的地

        它有一个newLne()方法,是跨越操作系统的换行符。

  (2)bufferedReader

      使用方式与bufferedWriter类似

       它有一个readLine()方法,一次读取一行数据,如果读到末尾,返回null

      readLine()原理:无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,所以最终使用的还是read方法一次读一个的方法.readLine()方法是在读到

      "\r\n"时认为读完一行(Windows系统下),然后将数据返回。

  (3)装饰模式是在原有类的基础上增强其功能,

    装饰模式中,我们可以把被装饰类的父类当作参数传进装饰类的构造方法内,那么你这一个装饰类就可以应用于这个体系的了,这也是java多态性的好处.
    相比较之下使用装饰模式降低了类之间的关系。装饰类是因为增强了已有的对象,具有的功能和已有的是相同的,是不过提供了更强的功能,所以装饰类和
      被装饰类通常属于一个体系中的。

  4.字节流的两个顶层基类是:InputStream(读),OutputStream(写)

       OutputStream的write()方法不需要flush()数据就已经写入到目的地了。

      这是一个字符缓冲输出流,该类保持对行号的跟踪,可以通过该类的setLineNumber(int)和getLineNumber(int) 方法分别设置和获取行号

5.  将字符流转对象化为字节流对象,使用转换流:InputStreamReader(字节通向字符的桥梁)

     OutputStreamWriter(字符通向字节的桥梁),也就是读进来的是字符,写进去的是字节,只有转换流能够指定编码表

6.总结IO操作的规律:通过两个明确来完成:
      (1)明确源和目的
          源: 输入流:InputStream,Reader
          目的:输出流:OutputStream,Writer
      (2)明确操作的额数据是否是纯文本
           是:字符流
           不是:字节流
      (3)当体系明确之后,再明确要使用那个具体对象
            通过设备来进行区分
            源设备:内存(数组流),硬盘(文件流),键盘(System.in)
           目的设备:内存(数组流),硬盘(文件流),控制台(System.out)  

转载于:https://www.cnblogs.com/wdsthink/p/4372904.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值