Java I/O流总结

1、流的分类

按照流的流向分:输入流和输出流

按照操作单元分:字符流和字节流

按照流的角色分:节点流和处理流

此次主要按照操作单元划分,结合具体的应用场景,分别对字符流和字节流进行描述。

2、字节流

Java中字节流处理的基本单位是单个字节,它通常用来处理二进制数据。字节流中最基本的两个类是InputStream和OutputStream,代表了最基本的输入字节流和输出字节流。

详细说明上图中的类:

2.1 InputStream

InputStream 是所有字节输入流的抽象基类。

2.1.2 FileInputStream

文件字节输入流,用于对文件数据以字节的形式进行读取操作。(字节流在默认情况下不支持缓存,在操作时本身不会用到缓冲区(内存),是文件本身直接进行操作,这意味着每次调用一次read方法就会请求操作系统来读取一个字节,往往会伴随一次磁盘I/O,效率比较低。)

FileInputStream常用方法:

1、read()从输入流中读取一个字节返回int类型变量,若达到文件末尾,则返回-1。

public int read() throws IOException

运行一次只读取一个字节,所有经常与while((len=fileinputstream.read())!=-1)一起使用。

2、read(byte[]b)从输入流中读取b.length个字节到字节数组中,返回读入缓冲区的总字节数,若达到文件末尾,则返回-1。

public int read(byte[]b)throws IOException

3、read(byte[]b,int off,int len)从输入流中读取最多len个字节到字符数组中(从数组的off位置开始存储字节),当len为0时则返回0,不为0,则将该方法阻塞,直到某些输入可用为止。

4、close()关闭输入流并释放与该流相关联的所有系统资源。

2.1.3 FilterInputStream

装饰者类,具体的装饰者继承该类,包括BufferedInputStream、DataInputStream和PushbakStream。

2.1.3.1 BufferedInputStream

缓冲流,对节点流进行装饰,内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是一个字节或两个字节这样发送,效率更高。

2.1.3.2 DataInputStream

数据输入流允许应用程序以与机器无关的方式从底层输入流中读取原始Java数据类型。 应用程序使用数据输出流来写入稍后可由数据输入流读取的数据。

2.1.3.3 PushbakStream

具有1个能回退上一个字节的缓冲区

2.1.4 ObjectInputStream

一般用于反序列化读入

2.1.5 PipedInputStream

用于多线程之间管道通信的输入源

2.1.6 StringbufferInpuStream

用字符串作为输入源

2.1.7 ByteArrayInputStream

字节数组char[] 作为输入源

2.1.8 SequenceInputStream

表示其他输入流的逻辑串联(合并流)

2.2 OutputStream

与InputStream对应。

3、字符流

3.1 Reader
  • CharArrayReader 类:将字符数组转换为字符输入流,从中读取字符。
  • StringReader 类:将字符串转换为字符输入流,从中读取字符。
  • BufferedReader 类:为其他字符输入流提供读缓冲区。
  • PipedReader 类:连接到一个 PipedWriter。
  • InputStreamReader 类:将字节输入流转换为字符输入流,可以指定字符编码。
3.2 Writer
  • CharArrayWriter 类:向内存缓冲区的字符数组写数据。
  • StringWriter 类:向内存缓冲区的字符串(StringBuffer)写数据。
  • BufferedWriter 类:为其他字符输出流提供写缓冲区。
  • PipedWriter 类:连接到一个 PipedReader。
  • OutputStreamReader 类:将字节输出流转换为字符输出流,可以指定字符编码。

字符流与字节流的区别:

InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。
即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值