Java Io流学习总结

一、什么是流?
流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,通过流我们可以自由地控制文件、内存、
Io设备等数据的流向。而IO流就是用于处理设备上的数据,如:硬盘、内存、键盘录入等
IO流根据处理类型的不同可分为字节流,根据流向的不同可分为输入流和输出流。
二、字节流和字符流的区别:
字符流,因为文件编码的不同,就有了对字符流进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码农。它的字节流的区别有两点:

  1. 在读取数据的时侯,字节流读到一个字节就返回一个字节,字符流使用了字节读到一个或多个字节(一个中文对应的字节数是两个,在UFT-8码表中是3个字节)时,先去查指定的编码表,在将查到的字符返回。
  2. 字节流可以处理所有类型的数据,如jpg、avi、mp3、mav等等,而字符流只能
    流的异常处理
  3. 将流对象放到try之外定义并且赋值为null,放到try之内初始化
  4. 在关流之前需要判断流对象是否初始化成功—判断流对象是否为null
  5. 关流之后需要将流对象置为null
  6. 需要在写完数据数据之后手动冲刷缓冲区以防关流失败有数据死在缓冲区中
    PS:从TXT文件读取数据 — 字符流、输入流 FileReader
    缓冲流
    字符输出流在输出的时候有缓冲区存在,输入流没有,字节流也没有
    在构建BufferedReader对象的时候需要传入一个Reader对象,底层读取数据靠的是传入的Reader对象,BufferedReader提供了缓冲区。—这种方式称之为装饰设计模式
    合并流:SequenceInputStream
    用于合并多个字节流的。在构建合并流对象的时候,需要传入Enumeration对象,利用了Vector中的elements()来获取这个Enumeration对象。
    转换流
    提供了字符流和字节流之间的相互转换。
    OutputStreamWriter:将字符流转化为字节流。
    InputStreamReader:将字节流转化为字符流
    系统流/标准流
    系统流都是字节流,本质上是静态对象,一旦关闭就无法使用,所以系统流在使用的时候一般不用关闭
    System.in 标准输入流
    System.out 标准输出流
    System.err 标准错误流
    • 文件流:FileInputStream/FileOutputStream, FileReader/FileWriter
    这四个类是专门操作文件流的,用法高度相似,区别在于前面两个是操作字节流,后面两个是操作字符流。它们都会直接操作文件流,直接与OS底层交互。因此他们也被称为节点流。
    注意使用这几个流的对象之后,需要关闭流对象,因为java垃圾回收器不会主动回收。不过在Java7之后,可以在 try() 括号中打开流,最后程序会自动关闭流对象,不再需要显示地close。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值