Java I/O

一、

I/O流分类

      1.输入流(Input Stream) 和输出流(Output Stream)

      2.节点流(Node Stream) 和处理流(Processing Stream)

      3.字符流(Character Stream)和字节流(Byte Stream)

二、

输入流和输出流
    按照数据流动的方向,Java流可分为输入流(Input Stream)和输出流(Output Stream)
    1.输入流只能从中读取数据,而不能向其写出数据
    2.输出流则只能向其写出数据,而不能从中读取数据
    3.特例:java.io.RandomAccessFile类。---(可以在文件的任何位置存取操作)
    (一般人是站在程序的角度,比如数据从外界传递到程序中,那么我们称为数据的输入,比如我们可以读取从
     键盘输入的数据,或者说从键盘输入数据到程序中)
三、

节点流和处理流
    根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)
    1.节点流直接连接到数据源(FileReader)
    2.处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连到数据源(BufferedReader)
四、

字符流和字节流
    a.按传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)
      1.字符流以字符为单位进行数据传输,每次传送一个或多个字符
      2.字节流以字节为单位进行数据传输,每次传送一个或多个字节
    b.Java命名惯例:
      凡是以InputStream或OutputStream结尾的类型均为字节流
      凡是以Reader或Writer结尾的均为字符流

五、

常用I/O流类型(1)
    a.FileInputStream/FileOutputStream
       FileInputStream用于读取本地文件中字节数据,

       FileOutputStream用于将字节数据写出到文件 -------------------即可以复制文本文件,也可以复制二进制文件(图片,视频等)(因为他们操作的是字节)
    b.FileReader/FileWriter
       FileReader用于以字符为单位读取文本文件,

       FileWriter类用于将字符数据写出到文本文件中
    c.BufferedReader/BufferedWriter
       BufferedReader用于缓冲读取字符,

       BufferedWriter则提供字符的缓冲写出功能
六、

常用I/O流类型(2)
    a.InputStreamReader(是字节流通向字符流的桥梁)
      1.InputStreamReader可封装字节输入流并从中读取字节数据,然后将之转换为字符
      2.转换时所使用的字符编码可以在构造方法中显式指定,也可以使用平台的默认字符编码
    b.OutputStreamWriter(是字符流通向字节流的桥梁)
      1.OutputStreamWriter把字符转化为字节并写出到它所封装的字节输出流
      2.转换时所使用的字符编码可以在构造方法中显式指定,也可以使用平台的默认字符编码
七、

常用I/O流类型(3)
    a.PrintStream
       PrintStream在OutputStream基础之上提供了增强的功能,即可以方便地输出各种类型数据(而不仅限于byte型)的格式化表示形式。PrintStream的方法从不抛出IOExecption。
    b.PrintWriter
      1.PrintWriter提供了PrintStream的所有打印方法,其方法也从不抛出IOExecption
      2.与PrintStream的区别:作为处理流使用时,PrintStream只能封装OutputStreamWriter类型的字节流而PrintWriter既可以封装OutputStreamWriter,还能够封装Writer类型字符输出流并增强其功能        
八、

常用I/O流类型(4)
    DataInputStream/DataOutputStream
    1.二者分别实现了DataInput/DataOutput接口
    2.DataInputStream能够以一种与机器无关的方式,直接从底层字节输入流读取Java基本类型和String类型的数据
    3.DataOutputStream则能够直接将Java基本类型和String类型数据写出到其他的字节输出流
九、

常用I/O流类型(5)
    a.CharArrayReader实现了一个可用作字符输入流的字符缓冲区
    b.CharArrayWriter实现了一个可当作Writer使用的字符输出缓冲区

十、

实现对象序列化
    a.要序列化一个对象,其所属的类必须实现以下两种接口之一:
       java.io.Serializable        java.io.Externalizable
    b.java.io.ObjectOutputStream/ObjectInputStream类分别提供了对象的序列化和反序列化功能
       注意:一般在实现Serializable接口的类中添加空的构造方法
十一、

对象序列化过程中的数据保护
    a.标记性接口Serializable(标记性接口没有实际的功能,主要用于区分)
    b.在对象序列化过程中,其所属类的static属性的方法代码不会被序列化处理
    c.对于个别不希望被序列化的非static属性,可以在属性声明时使用transient关键字进行表明

补充知识点:
      通道(Channel)是NIO中的另一种重要对象,通过它可以实现数据的读入和写出操作,与先前的“流”相比,
      其不同之处在通道是双向的(类似于RandomAccessFile流),而普通的I/O流只能单向地传输数据,
      这使得通道可以比流更好地反映底层操作系统的真实情况(底层操作系统中数据的传输通道都是双向的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值