java 各种io流介绍

一、简介
  1. 流按目标可以分成两类
    • 操作目标是内存、文件等各种设备:像ByteArrayInputStream操作的是内存,FileInputStream操作的是硬盘
    • 操作目标是其他流:其都继承了FilterInputStream或FilterOutputStream,可以被称为包装流。像BufferedInputStream,CheckedInputStream他们都是操作其他流,可以增强被操作流的功能
  2. 流按处理数据类型,可以分为字节流和字符流
    • InputStream/OutputStream :字节流都继承了该对象
    • Reader/Writer:字符流都继承了该对象
二、常见的流
说明
ByteArrayInputStream,ByteArrayOutputStream从字节数组中读取和向字节数组中写入,有些时候可以认为是流和为字节数组相互转换,有时候在某些第三方sdk中很有用
FileInputStream,FileOutputStream向文件中写入和从文件中读取内容
PipedInputStream,PipedOutputStream在两个线程间传递数据,原理简单说就是,两个流作为两个线程的公共变量,PipedInputStream维护了一个字节数组,两个流通过读取和写入这个字节数组来完成数据交换
SequenceInputStream可以把多个流串联在一起,顺序读取每个流
FilterInputStream,FilterOutputStream包装流。对输入输出流进行过滤,但是默认并没进行任何其他的操作,需要开发者自行重写响应方法来进行过滤操作
BufferedInputStream,BufferedOutputStream包装流。为其他流提供内存缓冲区,已BufferedOutputStream为例,在流中的数据写入目标之前,先存放在缓冲区,等缓冲区满了,在批量的流入目标。缓冲流的目的在于减少io操作,可用于写文件,网络传输数据等场景
CheckedInputStream,CheckedOutputStream包装流。对数据进行校验,像crc校验等
DataOutputStream,DataInputStream包装流,可以使基本数据类型和字符串与字节相互转换,用于写入和读取。举个例子,如果我们向文件中存储整数10000,一种方式我们可以直接向文件中写入字符串"10000",读的时候在通过Integer.valueOf(“10000”)转换为整型;另一种方式是,将整数10000(整型4用个字节表示)拆分成四个字节写入文件,读的时候在把四个字节合并为一个整型,这就是这两个流的做法。效率来说后者更高,因为他不需要编码转换(将“10000”用utf-8等编码为字节然后存储)和类型转换(将“10000”转换为整数10);存储成本来说,也是后者更少,前者编码转换后需要5个字节,而后者只需4个字节。
DeflaterOutputStream,DeflaterInputStream,InflaterOutputStream ,InflaterInputStream ,ZipOutputStream,ZipInputStream,GZIPOutputStream,GZIPInputStream,JarOutputStream,JarInputStream包装流,用于压缩和解压
DigestOutputStream,DigestInputStream包装流。消息摘要流,验证流数据的安全性和完整性(如md5)类似crc校验
PrintStream包装流。输出字符流,将所有的基本类型转换为字符串输出(使用默认编码)。如,boolean,打印true或false,空指针则打印null
OutputStreamWriter,InputStreamReader包装流,简单点说就是字节和字符的相互转换,转换的方式和DataOutputStream,DataInputStream不一样,其使用的是字符编码的方式
FileReader,FileWriter对应了FileInputStream,FileOutputStream的字符操作方式
BufferedReader,BufferedWriter对应了BufferedInputStream,BufferedOutputStream的字符操作方式
LineNumberReader继承了BufferedReader,实现了获取行号的功能
CharArrayReader,CharArrayWriter对应了ByteArrayInputStream,ByteArrayOutputStream的字符操作方式
CharArrayReader,CharArrayWriter对应了PipedInputStream,PipedOutputStream的字符操作方式
StringReader,StringWriter简单字符串工具 ,StringWriter 使用StringBuffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值