Java I/O 概述

I/O

   I/O 是 input 和 output 的简写,Java API 中,可以读入字节或字符序列的对象称为输入流,可以写入字节或字符序列的对象称为输出流。其来源地和目的地可以是文件,也可以是 socket、http、数组甚至是两个线程之间。

   I/O 包下有几十个类文件,大概分为以下几种:

  • InputStreamOutputStreamReaderWriter为代表的 I/O 类
  • 与文件系统相关的泪,例如FileFileFilterRandomAccessFile
  • 序列化相关的类
  • 其他,例如工具类、异常类

流家族

InputStreamOutputStream中继承的类是用来处理字节流。从ReaderWriter继承的类是用来处理 Unicode 字符,这些类的读写操作都是基于 Unicode 码元的。通过InputStreamReaderOutputStreamWriter可以将字节流转为字符流。

流家族体系
流家族
上图中,红色的类表示已被弃用。

字节流

InputStream

InputStream有几个常用的方法 :
* mark : mark方法用于标记当前读取的位置,与reset方法配合使用。
* reset : 返回mark标记的位置,重新从该位置读取字节
* markSupported : 是否支持 mark/reset
* available : 剩余未读取的字节数
* skip : 跳过并丢弃指定的字节数
* read : 读取字节

markSupportedskip 说明
ByteArrayInputStream 支持支持输入源,将byte[]作为输入源的类
FileInputStream 支持支持输入源,将文件作为输入源的类
PipedInputStream 不支持支持输入源,用于进程间通信,与PipedOutputStream配合使用
SequenceInputStream 不支持支持将多个输入源合并成一个输入源,available方法只返回当前输入源的available
FilterInputStream

继承自FilterInputStream子类是装饰器类,它们不能自己产生字节序列,需要配合输入源才能使用,它们的主要作用是增加输入流的功能。在别的编程语言里,诸如缓冲机制和预览等细节都是自动处理的,相对而言,Java 就比较麻烦,必须配合装饰器类才能实现。但是这种方式带来极大的灵活性。

markSupportedskip 说明
BufferedInputStream 支持支持给输入流增加缓冲机制
PushbackInputStream 不支持支持给输入流增加推回功能,即将读取的字节推回到缓冲区
DataInputStream 不支持支持允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型,一般与DataOutputStream配合使用,另外DataInputStream读取时采用的 Java 版的 UTF-8 编码,与标准 UTF-8 不同。所以DataInputStream读取的字节流必须时通过DataOutputStream写入的,不然会出问题
OutputStream

OutputStream有几种常用的方法:

说明
ByteArrayOutputStream 将输出流转化为byte[]
FileOutputStream 文件输出流
PipedOutputStream 管道输出流,与PipedOutputStream配合使用
FilterOutputStream

类似于FilterInputStreamFilterOutputStream也是装饰器类的基类。

说明
BufferedOutputStream 给输出流增加缓冲机制
PrintStream 打印输出流
可直接输出至文件 (里面封装了FileOutputStream)
自动刷新功能,遇到\n或者写入一个byte数组之后自动调用flush方法
可方便打印各种数据值表示形式
与其他输出流不同,它产生的IOException异常会被自身函数捕获,可以通过checkError检查是否发生过异常
通过format方法,支持格式化输出
打印的字符使用平台默认字符编码转换为字节,也可以指定编码类型
null值会被转为null字符,布尔类型会被转为truefalse字符
DataOutputStream 允许应用程序以与机器无关方式写入基本 Java 数据类型,配合DataInputStream使用。
ObjectOutput 和 ObjectInput

ObjectInputStreamObjectOutputStream用于对象的序列化,可以将任何 Java 类型包括对象,序列化成字节序列。

字符流

Reader

Reader用于读取字符流的抽象类,使用字符流读取文件,比字节流更高效。可通过InputStreamReader将字节流转换为字符流。

markSupportedskip 说明
CharArrayReader支持支持输入源,将char[]作为输入源的类
StringReader支持支持输入源,将String作为输入源的类
PipedReader不支持支持类似PipedInputStream
FileReader不支持支持类似FileInputStream,实际上就是在FileInputStream外面套了InputStreamReader
InputStreamReader不支持支持将字节流转为字符流,可以指定字符编码
BufferedReader支持支持类似于BufferedInputStream,带有缓冲机制的字符流,需要提供输入源
PushbackReader不支持支持类似PushbackInputStream
Writer
说明
CharArrayWriter 将输出流转为char[]null值被转为null字符串
StringWriter 将输出流转为Stringnull值被转为null字符串
PipedWriter 类似PipedOutputStream
PrintWriter 类似PrintStream
OutStreamWriter 将字节流转为字符流,可以指定字符编码
BufferedWriter 类似于BufferedOutputStream,带有缓冲机制的字符流,需要提供输入源
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值