IO流小总结

文章目录


前言

学习Java IO,不得不提到的就是JavaIO流。 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。 即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、I/O流体系结构图

二、字节流

1.字节输入流InputStream

1.FileInputStream

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的路径名name命名。

字节输入流读取数据的步骤:

创建字节输入流对象
调用字节输入流对象的读数据方法
释放资源
一次读一个字节数组的方法

public int read(byte[] b):从输入流读取最多b.length个字节的数据
返回的是读入缓冲区的总字节数,也就是实际的读取字节个数

2.BufferedInputStream

BufferedInputStream继承于FilterInputStream,提供缓冲输入流功能。缓冲输入流相对于普通输入流的优势是,它提供了一个缓冲数组,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户.由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快。

2.字节输出流OutputStream

1.FileOutputStream

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的路径名name命名。

字节输入流读取数据的步骤:

创建字节输入流对象
调用字节输入流对象的读数据方法
释放资源
一次读一个字节数组的方法

public int read(byte[] b):从输入流读取最多b.length个字节的数据
返回的是读入缓冲区的总字节数,也就是实际的读取字节个数

2.BufferedOutputStream

BufferedOutputStream 是缓冲输出流。它继承于FilterOutputStream。的作用是为另一个输出流提供“缓冲功能”。

三、字符流

1.字符输入流Reader

1.InputStreamReader

 可以把InputStream中的字节数据流根据字符编码方式转成字符数据流。它除了可以使用基类定义的函数,它自己还实现了以下函数:

  • read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1

2.BufferedReader

可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它除了可以使用基类定义的函数,它自己还实现了以下函数:

  • read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
  • readLine() :读取一个文本行,以行结束符作为末尾,返回结果是读取的字符串。如果已到达流末尾,则返回 null

2.字符输出流Writer

1.OutputStreamWriter

可以使我们直接往流中写字符串数据,它里面会帮我们根据字符编码方式来把字符数据转成字节数据再写给输出流,它相当于一个中介\桥梁。

2.BufferedWriter

  • 它利用了缓冲区来提高写的效率。它还多出了一个函数:
    • newLine() :写入一个换行符。

四、特殊操作流

1.Properties

  • 是一个Map体系的集合类
  • Properties可以保存到流中或从流中加载
  • 属性列表中的每个键及其对应的值都是一个字符串

特有的三个方法

Object setProperty(String key, String value)     设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key)                          使用此属性列表中指定的键搜索属性
Set stringPropertyNames()                                从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
 


总结

输入流和输出流:输入流只能从中读取数据,而不能写入数据;输出流只能向其写入数据,而不能从中读取数据;
字节流和字符流:字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符;
节点流和处理流:节点流可以从/向一个特定的IO设备读/写数据的流;处理流则用于对一个已存在的流进行连接或封装;
Java的IO流的40多个类是从4个抽象基类派生的。
InputStream /Reader:所有输入流的基类,它们把输入设备抽象成一个“水管”,水管里的每个“水滴”依次排列,输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取,每当程序从输入流取出一个或多个水滴,记录指针自动向后移动;
OutputStream /Writer:所有输出流的基类,原理与输入流相同;

谢谢大家!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值