关于I/O流---学习笔记

I----input---输入

o----output---输出

统一的外观:

所有读取数据的代码,都叫做read;

所有写入数据的方法,都叫做write;

三套I/O操作的api

BIO--基本的IO操作

NIO--异步的IO操作---web阶段

AIO--同步的IO操作---web阶段

IO流

BIO:有一套标准的流模型

1.区分输入与输出:

区分的关键在于立场; 永远站在程序的立场上考虑

2.确定管道的粗细---就是确定管道传输数据的最小单位

字节流和字符流。

人不能看懂的二进制数据,就是要字节传递。

人能看懂的文本数据,就是用字符传递。

我们要清楚两点:

1.字节流传递单位是最小的;理论上可以传递所有数据;

2.选择合适的管道,对于我们来说书写带来方便。

3.选择四大抽象类

InputStream----输入字节流

outputStream---输出字节流

Reader---输入字符流

Writer---输出字符流

4.更加应用场景确定具体管道使用的实现类

1.节点流---用于应用在流模型,确定的另一个端点是谁。

节点流可以单独使用,

2.操作流---在流传过程中做点额外的操作做动作。

操作在工作中不能单独使用,只能用于对接,最后一定要街道节点流身上去。

5.书写I/O流操作代码的标准步骤

第一步:先new出管道实现类

第二步:输出调用write方法,输入调用read方法

第三步:一定要关闭管道。

###对象的序列化和反序列化(对象流)

1、无论是对象的序列化还是反序列化都与文件无关;

    对象序列化----把程序中的对象,以二进制流的形式输出;

    反对象序列化---把程序中的二进制流对象,以对象的形式输出;

    都操作流,都与文件无关,而且反序列化产生对象。

2、我们要做对象序列化和反序列化,要使用到的流是:ObjectOutputStream 和               ObjectInputStream。注意:前者是序列化;后者是反序列化。

对象流模型

对象序列化 FileOutputStream 对象 ----> 二进制流 -----> 目的 ObjectOutputStream

对象反序列化 FileInputStream 程序 <---- 二进制流 <---- 某源 ObjectInputStream

标识接口

我们之前所用的接口和自己设计的接口都是属于接口的第一种用法,即在没有继承关系的类当中让他们共享行为

而类似于Serializable这样的接口,连方法都没有,所以设计它的理由一定不是上面共享行为的理由。 它的设计理由,是设计接口的第二种用法,即通过判断是否实现某个特殊接口,从而决定是否允许执行某种操作。

也就是说这种接口相当于是给实现了这个接口的类的对象,打上了一个标记,通过利用instanceof进行判定,从而允许或不允许做某个操作,就像通行证或是盖章一样。

回顾:什么是JavaBean?

即:两个必须,一个应该。

1、必须要有公共无参构造;

2、必须为属性提供符合命名规范的get/set方法; 命名规范是: 属性叫做 xxxx get方法 getXxxx(); set方法 setXxxx(); 后来在Java Bean规范的修正版本中,boolean的属性,它的get方法修正为is方法;

3、应该 实现Serializable接口;

transient

这个关键字是用来修饰属性的,凡是被这个关键字修饰的属性不参与序列化。那么被序列化出去的对象,该属性如果是基本数据类型那么值就是0,如果是引用数据类型值就是null。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值