Java IO流

IO流

概念

I 	--  input	输入,数据流向程序(读文件)
O	--	output	输出,数据流出数据(写入文件)
流	--	一点一点的像水流一样去传输数据
注意:站在程序的角度去看待是输入还是输出

分类

按照方向分类:输入流、输出流
按照单位分流:字节流、字符流
按照功能分类:基础流/节点流、处理流
注意:new 处理流(new 基础流) -- 装饰者模型 -- 处理流对象中往往包含了基础对象流,在基础流的基础上拓展了额外的功能,使得流的效率更高,工作中一般使用处理流。

字节流

应用场景:操作二进制数据(音频、视频、图片)

在这里插入图片描述

abstract class InputStream	字节输入流的基类(抽象类)
abstract class OutputStream	字节输出流的基类(抽象类)
class FileInputStream extends InputStream	--文件字节输入流
class FileOutputStream extends OutputStream	--文件字节输出流
class FilterInputStream extends InputStream	--过滤器字节输入流
class FilterOutputStream extentds OutputStream	--过滤器字节输出流
class BufferedInputStream extends FilterInputStream	--带缓冲区的字节输入流
class BufferedOutputStream extends FilterOutputStream	--带缓冲区的字节输出流
//默认缓冲区大小:9182字节

字符流

应用场景:操作纯文本数据

在这里插入图片描述

注:字符流 = 字节流 + 编译器

编译器:编译器可以识别中文字符和非中文字符,非中文字符获取一个字节(一个字节=一个字符),然后编译器根据编码格式获取中文字符对应的字节数(GBK获取两个字节,UTF-8获取三个字节)
abstract class Reader	--字符输入流的基类(抽象类)
abstract class Writer	--字符输出流的基类(抽象类)
class InputStreamReader extends Reader	--字符输入转换流
class OutputStreamWriter extends Writer	--字符输出转换流
//特点:将字节流转换为字符流,字符转换流是字节流和字符流的桥梁
class FileReader extends InputStreamReader	--文件字符输入流
class FileWriter extends OutputStreamWriter	--文件输出流
class BufferedReader extends Reader	--带有缓冲区的字符输入流
class BufferedWriter extents Writer	--带有缓冲区的字符输出流
//默认缓冲区大小:8192字符	--	new char[8192]

各种流

对象流

应用:服务器崩掉时,将对象流文件传给另一个服务器,另一个服务器加载对象流文件,继续为客户端提供服务

class ObjectInputStream		--对象输入流
class ObjectOutputStream	--对象输出流
//该流可以将对象写入文件,也可以读取文件中的对象
序列化/钝化:将程序中的对象写入到文件中
反序列化/活化:将文件中的对象读取到程序中

注:

  1. 写入数据后,打开文件我们是看不懂的,这个不重要,重要的是取出来能用
  2. 对象所属的类必须实现序列化接口 – Serializable
  3. Serializable接口,没有让我们实现任何的抽象方法,这种接口称之为标记型接口
  4. 添加序列化ID --private static final long serialVersionUID = -6885984330342979506L;
  5. transient关键字修饰在之后,该属性不会随着对象被写入到文件

内存流

class ByteArrayInputStream	--内存输入流

class ByteArrayOutputStream --内存输出流

注:

  1. 内存流是程序到内存的通道,之前的流是程序到硬盘的通道
  2. 内存流是关闭不掉的,我们没有权限关闭内存的通道

打印流

class PrintStream -- 字节打印流
class PrintWriter -- 字符打印流
//注:方向就是程序到文件(本质意义上是一个输出流)

PrintStream vs PrintWriter

相同点:底层都是讲文件字节输出流->字符输出转换流->带有缓冲区的字符输出流

不同点:

​ PrintStream 只能将字节流转换为打印流

​ PrintWriter 可以将字节流和字符流转换为打印流

打印流拓展 - 重定向

理解:重新定义系统标准输入流、输出流、错误输出流的方向

重新定义系统标准输入流的方向

System.in – 系统标准输入流

方向:控制台 -> 程序

重定向:System.setIn(字节输入流)

方向:文件 -> 程序

重新定义系统标准输出流的方向

System.out – 系统标准输出流

方向:程序 -> 控制台

重定向:System.setOut(字节打印流)

方向:程序 -> 文件

重新定义系统标准的错误输出流

System.err – 系统标准的错误输出流

方向:程序 -> 控制台

重定向:System.setErr(字节打印流)

方向:程序 -> 文件

随机访问流 - RandomAccessFile

理解:该流认为文件是一个大型的byte数组。该流有一个隐藏的指针(下标),指针从0开始(也可以设置指针的位置),可以从指针的位置开始读取或者写入

模式: r - 读, rw - 写

注:该流和上述的流没有继承、实现关系

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值