I O 流

IO流

概念

I ---- in -- 输入(将外界的数据传入到程序中)

O -- out -- 输出(将程序中的数据传出到外界)

流 -- 一点点的传输

注意:站在程序的角度理解输入输出

分类

按照方向分:输入流、输出流

按照单位分:字节流、字符流

按照功能分:节点流/基础流、处理流

注意:处理流往往是包含着节点流,让流的功能更加强大 -- new 处理流(new 基础流);

存储单位进制

1024byte = 1Kb

1024Kb = 1Mb

1024Mb = 1Gb

1024G = 1Tb

1024Tb = 1Pb

字节流

应用场景:处理二进制数据(图片、硬盘、视频)

abstract class InputStream -- 字节输入流(字节流的基类)

abstract class OutputStream -- 字节输出流(字节流的基类)

class FileInputStream extends InputStream -- 文件字节输入流

class FileOutputStream extends OutputStream -- 文件字节输出流

class FilterInputStream extends InputStream - 过滤器字节输入流

class FilterOutputStream extends OutputStream - 过滤器字节输出流

class BufferedInputStream extends FilterInputStream - 带缓冲区的字节输入流

class BufferedOutputStream extends FilterOutputStream - 带缓冲区的字节输出流

缓冲区大小:8192字节 - new byte[8192]

字符流

应用场景:处理纯文本数据

abstract class Reader -- 字符输入流(字符流的基类)

abstract class Writer -- 字符输出流(字符流的基类)

class InputStreamReader extends Reader -- 字符输入转换流(将字节流转换为字符流)

class OutputStreamWriter extends Writer -- 字符输出转换流(将字节流转换为字符流)

注意:

  1. 将字节流转换为字符流,用于传输文本数据

  2. 字符流要加上编码格式,防止乱码

  3. 字符流底层是字节流+编码器

class FileReader extends InputStreamReader -- 文件字符输入流

class FileWriter extends OutputStreamWriter -- 文件字符输出流

class BufferedReader extends Reader -- 带缓冲区的字符输入流

class BufferedWriter extends Writer -- 带缓冲区的字符输出流

缓冲区大小:8192字符 -- new char[8192]

各种流

对象流

理解:将对象写入到文件,将文件里的对象读取到程序中

class ObjectInputStream -- 对象输入流

class ObjectOutputStream -- 对象输出流

序列化/钝化:程序里的对象 写入到 文件中

反序列化/活化:文件中的对象 读取到 程序中

注意:

  1. 对象所属的类必须实现序列化接口 - Serializable

  2. Serializable接口没有任何抽象方法

  3. 没有任何抽象方法的接口叫做标记型接口

  4. Serializable的实现类必须添加序列化ID - serialVersionUID

  5. transient修饰的成员属性,该属性不会随着对象写入到文件中

  6. 静态属性不会随着对象写入到文件中,因为静态属性不属于对象

内存流

理解:以前我们学习的流是内存(程序)到硬盘(文件)的通道,内存流是程序到内存的通道。内存流是将数据存储到内存里,所以他是非数据持久化

class ByteArrayInputStream -- 内存输入流

class ByteArrayOutputStream -- 内存输出流

注意:内存流是程序到内存的通道,是关闭不掉的

打印流

理解:打印流是程序到文件,只有一个方向

class PrintStream -- 字节打印流

class PrintWriter -- 字符打印流(底层是由字节打印流实现的)

PrintStream vs PrintWriter

PrintStream:可以将字节流转换为字节打印流

PrintWriter :可以将字节流、字符流转换为字符打印流

重定向

System.setIn(new FileInputStream("hhy.txt")); -> 重定向后(方向:文件->程序)

InputStream in = System.in; -> 系统标准的输入流(方向:控制台->程序)

System.setOut(new PrintStream("hhy.txt"));->重定向后(方向:程序->文件)

PrintStream ps = System.out; -> 系统标准的输出流(方向:程序->控制台)

System.setErr(new PrintStream("hhy.txt"));->重定向后(方向:程序->文件)

PrintStream ps = System.err; -> 系统标准的错误输出流(方向:程序->控制台)

随机访问流

理解:该流认为文件是一个大型的byte数组,该流有一个隐藏的指针(默认为0),可以从指针开始读取或写入(该流有两个方向),模式r为读,默认rw为写。可以设置指针的位置。

提升方向

BIO -> NIO -> AIO

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值