java io包_Java.io包

java.io包的传统IO流对象

一、概述

1.1OOP的实质是通过委托实例来帮我们实现计算机的功能,通过这些类来执行相应的功能。打代码的实质就是看API,熟悉API,掌握API,写API,测试API。

1.2IO流的本质就是数据流对象,也就是资源类,也就是通过这些类来表示文本文件,图片文件,视频文件,声音文件,当然还需要处理这些文件的对象才可以。所以接下来重点解释这些流能帮我们做到什么事。

二、抽象类

原理就是能够把数据拷贝放在内存中,然后我们就去处理这些字节或者字符。

InputStream

输入字节流的父类,表示外部文件输入内存的流对象,能把外部数据输入内存,也就是定义了一块内存空间,让外部数据输入这个空间。

OutputStream

输出字节流的父类,需要接收器,把数据输出到接收器去。

Reader

读取字符流父类,基础数据是字符,功能和字节流一样。

Writer

写入字符流对象。

三、抽象接口

DataInput和DataOutput

实现对基本数据类型的读写,不需要关闭。

对InputStream和OutputStream对象的封装。

ObjectInput和ObjectOutput

扩展了对象、数组、字符串的读写

四、功能接口

AutoCloseable

自动关闭文件接口,close方法将关闭文件,相当于把文件放回去。

JDK1.7以后try-with-resource将会自动关闭try()中流对象。

其中,Closeable extends AutoCloseable。

Flushable

刷新缓存到底层流,流内部的字节或字符数组就是缓存。

Serializable

序列化接口,标志接口,实现此方法才能把对象序列化为文件。

五、实体类

5.1ByteArrayInputStream和ByteArrayOutputStream

ByteArrayInputStream

以内存中字节数组为流输入端,是一种缓存的流对象

ByteArrayOutputStream

以内存中字节数组为流的接收器,输出缓存

ByteArrayInputStream和ByteArrayOutputStream都是自增长的数组,所以通常用来做缓冲区,或者别的流的底层流,最大容量Integer.MAX_VALUE-8,扩容两倍,。

5.2FileInputStream和FileOutputStream

FileInputStream,源数据是文件,读取原始字节流

FileOutputStream,接收器也是文件,写出原始字节流

FileInputStream和FileOutputStream文件读写数据流,会创建文件描述符,文件访问通道等对象,用以完成对计算机底层文件系统的交互。

5.3InputStreamReader和OutputStreamWriter

InputStreamReader将字节流转换为字符流输入到JVM,并将其解码为指定charset(有设置就用JVM的设置,没设置就默认UTF-8),读取过程中按照字符集转换为char[]。

OutputStreamWriter将字符流,转换成字节流输出到接收器

InputStreamReader和OutputStreamWriter都是里面是字符,外面是字节。这两个类是FileReader和FileWriter的父类

怎么用?字符数组编码为指定格式,以流对象写入文件中。

5.4FileReader和FileWriter

就比InputStreamReader和OutputStreamWriter多了几个构造方法

文本文件读写,也是底层字节数组转换为字符数组。

5.5PipedInputStream和PipedOutputSteam

管道流,进程间通信的一种实现方式。

原理:一个缓冲数组(默认大小1024),PipedInputStream负责读,

PipedOutputSteam负责写。通过(notifyAll,wait来实现线程间协作,数组访问互斥)

[1] https://www.jianshu.com/p/e14...

5.6FileChannel 零拷贝

5.7FilterInputStream和FilterOutputStream

装饰者模式,本身只是实现了InputStream和OutputStream的方法。

5.8BufferedInputStream和BufferedOutputStream

添加了缓冲数组(大小8k)

5.9BufferedReader和bufferedWriter

5.10DataInputStream和DataOutputStream

对原始数据类型的读写

5.11StringReader和StringWriter

String的Stream封装类。

StringReader底层是String,

read()是将String中的内容复制一份返回。

StringWriter底层是StringBuffer,

write()是将字符串拼接到StringBuffer后面。

五、java.io包结构图

ff958988826a42120eb6e6c4f0dd1abb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值