IO流

IO流学习笔记

最近学习了一下java的io流,自己做了一点小总结

IO流的划分

根据流的方向分:

输出流 InputStream 、 Reader
输入流 OutputStream 、Writer

根据流的单位分:

字节流:InputStream 、OutputStream
字符流:Reader 、Writer

根据流的功能分:

 节点流(低级流):能够直接操作源的流(构造方法可以直接写文件路径的)
处理流(高级流):不能直接操作源的流,但是有特定的功能

	BufferedReader:可以一行一行读取数据,拥有readLine()
	BufferedWriter:可以换行输出,拥有newLine()

高级流和低级流

高级流和低级流都是对文件的操作,都一样的具有read()读文件数据和write()写数据到文件。
高级流能够处理低级流处理不了的事务,但是也是一样具有读和写的方法,但是可以写入任何的对象,也可以读出任何的对象。

低级流之间的区别

两个低级流之间的区别就只是在于流的单位,一个是byte级别,一个是char级别的。
FileInputStream 和 FileOutputStream : 适用于复制、拷贝文件(特别是多媒体文件)
FileReader 和 FileWriter : 适用于修改文本文档的内容,获取到的是char字符,容易进行操作

高级流和低级流的操作

所有的IO流都是一样,都是一样需要new出来。
低级流就直接在构造函数里放文件路径,高级流new出来就要在构造函数里放低级流的对象,毕竟高级流不能直接访问源,但是可以通过传入低级流间接访问和操作流。
不管是高级流还是低级流,都要加上finlly关键字来关闭资源。
不管是高级流还是低级流,把数据写入文件之后,都要调用flush()方法,将暂存区的数据强制输出到文件中。

但是从文件读出数据就不需要也没有fluch()这个方法。

对象序列化和反序列化

  1. 所有需要序列的对象,必须实现序列化接口Serializable或Externalizable接口
  2. 如果有父类实现序列化接口,子类可以不用再实现
  3. 如果属性不需要被序列化,可使用transient关键字修饰
    (例如:private transient int age;//transient 隐藏属性,不被序列化)
序列化思路

1、 先实例化对象(或者是把对象传过来)
2、 New一个节点流,指明要存放对象的文件
3、 实例化处理流,将节点流放到处理流里,节点流开始调用write()方法写入文件
4、 刷新处理流,关闭处理流。

反序列化思路

1、 new一个节点流,指明要读取的文件
2、 实例化处理流,将节点流放到处理流的构造函数中,节点流调用read()方法读取文件数据
3、 对象接收处理流读出来的数据(对象读出来的数据是Object类型的,但是可以下朔成对象的类型,因为序列化的时候,对象上朔成Object类型)
4、 关闭处理流

总结

首先都要先指明要操作的文件
不管是低级流还是高级流,都需要new出来,低级流调用构造函数就直接把文件的路径加上,指明要操作的文件。
而高级流必须通过传入低级流才能进行操作。
高级、低级流的操作都是read()和write()两个方法。

还请个位大神给我这个准备实习的小白指教指教

写给自己的话:第一次写博客,有点小兴奋。希望可以在后面学到更多的东西吧。一分耕耘一分收获,耕耘多少收获多少。2020届的小白希望能找到一份合心意的java开发工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值