Java I/O流

I/O 流

流的基本概念

输入输出是任何语言都会涉及的内容,内存中的数据,当程序运行完毕或中断退出,当前操作的数据就会消失。
如果要将系统的数据保存起来,就需要流的操作,文件的操作。
流:当需要读取数据的时候,就需要开启一个通向数据源的设备流。这个数据源可以是文件、内存、网络资源等。
当程序需要写入数据的时候,就需要开启一个通向目的地的设备流,这个时候我们可以将数据理解为流,在管道里进行传输或流动。
特征:
1、含有流质
2、具有方向
符合计算机中系统中数据传输的特征,流来抽象数据传递。
在这里插入图片描述
方向: 硬盘文件==》程序(输入流)
程序===》硬盘文件(输出流)

程序中流的分类

java.io包中提供了我们操作数据使用的各种流。
按照分向分:
1、输入流 (InputStream类, Reader类)对象代表输入流
2、输出流(OutputStream类,Writer类)
按照类型分:
1、字节流:以byte为最小单位进行传递。字节流经常用于操作二进制的文件(图片、音频、视频)
2、字符流:以char为最小单位进行传递。(针对于文本内容)
按照功能分:
1、节点流:节点流表示从一个特定的数据源进行读取数据,节点流一般直接操作文件、或者网络等提供的流。它们直接从文件读取数据或直接将数据写入到文件中,也称为低级流。
2、处理流:处理流不是直接连接到设备上,而是建立在其他流之上,也通过对数据处理提供更强大的功能,也称为高级流。(程序中大多使用处理流)
class类:InputStreamOutputStreamReaderWriter都是抽象类。
操作流的步骤:
1、建立流、根据不同类型的数据选择不同的流进行操作。
2、操作流,将数据数据读取到内存或者将内存数据写入到数据源
3、关闭流,释放所有的资源。

file文件类的操作

java.io包提供的一个类,用于管理磁盘里的所有文件或者文件的目录。比如:文件的大小、名字、类型都可以操作,唯一不能操作文件的内容。
File类描述的是一个文件或者一个文件夹,该类是为了封装File对象提供各种文件操作方法,供我们开发过程中直接调用接口就可以完成某些的特定功能。

具体流的操作

在这里插入图片描述
深色为节点流、浅色为处理流。
InputStream:
FileInputStream:对二进制的文件进行操作,数据源一般为磁盘
PipedInputStream: 主要针对线程管道
FilterIutputStream: 过滤流、提供的子类非常重要,缓冲流、数据流
BufferedInputStream缓冲流:
作用:
1、减少了磁盘的IO操作
2、 提高了数据读写的效率。
DataInputStream:数据操作流
1、读取的数据转为bytebooleanlongfloat等。也可以输出bytelong等数据类型。
LineNumberInputStream: 表示程序读取到哪一行,计数器。
ByteArrayInPutStream:对内存缓冲区的数据进行读写操作、数据源是内存的字节数组。
SequenceInputStream:实现两个文件的合并。
StringBufferInputStream:用于操作字符串的流.
ObjectInputStream:对象流,用于操作内存中对象.

字符流

以字符为单位来进行传输,char采用16位Unicode编码表示字符和字符串。
分为两类:
字符输入流:Reader
字符输出流:Writer
字符集:就是规定了摸个文字对应的二进制的存放方式(编码)和某个二进制代表了那个文字(解码)的转换关系
字符编码:计算机只能存放0或1二进制数据,我们要对各种字符指定一个数字编码,这种编码就是编码集。
字符编码:“UTF-8”;“gb2312”,“gbk”,“unicode” 编码。
计算机中只保存字符对应的编码,计算机只需维持字符集清单,当读到这种编码的时候就拿去和清单进行对比找出当前字符,在显示成我们可以识别的字符样式。

Reader 和Writer

在这里插入图片描述
针对文件传输,一般选择用字节流。

文件操作步骤

1、创建文件对象
2、创建流对象
3、读取信息、写入信息
4、关闭流,先开的先关,如果有处理流,优先关处理流,一般有处理流就可以不关节点流。

对象流的操作

对象的序列化:将所有的object对象转化为byte为单位内容传输到目的地(磁盘、网络空间)
反序列化:将磁盘的数据已byte为单位读取,转化为object对象存放到内存。
创建对象方式:1、new 2、克隆 3、 反序列化
序列化规范:
1、你要序列化对象必须要实现Serializable接口,如果对象没有实现接口,序列化的时候会抛出没有实现接口的异常。
2、静态变量和成员方法不可序列化。
3、一个类要被序列化,该类引用的对象也是可以被序列化的,否则整个序列化过程将失败。
4、声明transient 关键字,可以控制当前属性可以不被序列化。

序列化的类:
ObjectInputStream序列化对象
ObjectOutputStream反序列对象
注:写入文件时,默认会将数据给覆盖,后面传输的内容会覆盖前面的内容,以前的数据丢失。如要追加在构造方法后面添加一个true的参数。序列化对象时每次在创建对象会追加一个4个字节头信息,输出的时候需减去。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值