java----IO
Posted 小鹿可可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java----IO相关的知识,希望对你有一定的参考价值。
1.流介绍
1.1流概念
流的本质是数据传输,是数据集合具有方向性的数据传输
作用:在数据源和程序之间建立的数据通道
1.2 流的划分
1.2.1流方向
输入流,输出流
1.2.2 流单位
字节流,字符流
1.2.3功能划分
节点流
过滤流(高级流):对已有节点流进行封装
1.3流基类
字节流和字符流区别:
字节流数据是以字节为数据单元,byte[]
字符流数据是以字符为数据单元,char[]
读方法:int read(),read(byte[] bytes)/read(byte[] byte,int off,int len)
写方法:void write(int n), write(byte[] b),write(byte[] bytes, int off, int len)
字符流:
- 输入流:Reader
- 输出流:Writer
字符流:
- 输入流:InputStream
- 输出流:OutputStream
2.File类
2.1 作用
不是操作文件内容,而是操作文件或文件夹等
2.2 路径
- 相对路径:不带盘符的路径,“ . ”表示当前路径。“…”表示父路径
- 绝对路径:带有盘符(windows:D \\ C:\\)
2.3 方法
创建和删除
文件获取
3.具体流
- 文件操作字节流:FileInputStream/FileOutputStream
- 文件操作字符流:FileReader/FileWriter
- 缓冲流:BufferInputStream/BufferOutputStream
- 转换流:InputStreamReader/OutputStreamWriter
- 对象流:ObjectInputStream/ObjectOutputStream
4.序列化
概念
- 将对象实例保存到磁盘的过程就是序列化
- 反序列化是将磁盘中的数据解析为对象实例的过程
- seriaVersionUID:序列化的版本号,由类名、方法名和属性等生成64位哈希值
- transient关键字:用来控制属性等不参与序列化的过程
5. RandomAccessFile类
5.1 概念
随机访问类:对文件内容的访问可以随机进行读取和写入,即该类既可以读数据也可以写数据
5.2 构造实例
构造函数中第二个参数指定访问模式,有4种模式
- r:以只读的模式打开,如果调用write方法将会抛出IO异常
- rw:以读和写的模式打开
- rws:以读和写的模式打开,要求对”文件的内容“和”元数据“的每个更新都同步到存储设备
- rwd:以读和写的模式打开,要求对”文件的内容“的每个更新都同步到存储设备
5.3特殊方法
long getFilePointer() // 返回文件记录中指针的当前位置
void seek(long pos) // 将文件记录移动到指定的pos文件
6.IO设计模式
6.1 装饰器
装饰器的UML图:
6.1.1 概念
装饰器是在不必修改原有类和不使用继承的方式,动态的扩展新的功能
6.1.2装饰器角色
- Component:为统一接口,也是装饰类和被装饰类的基本类型
- ConcreteComponent:为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类
- Decorator:是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteComponent的实例,并可以通过构造函数初始化。而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。
- ConcreteDecorator:是具体的装饰产品类,每一种装饰产品都具有特定的装饰效果。可以通过构造器声明装饰哪种类型的ConcreteComponent,从而对其进行装饰。
6.1.3 IO流中装饰器使用
InputStream是被装饰类和装饰类的基本类型,这里是通过抽象类的形式提供的,相当于Component接口FileInputStream是具体的被装饰类,是继承自InputStream,提供了完备的InputStream方法的实现。相当于是concreateComponent类FilterInputStream是装饰器类,其继承InpuStream,内部维护了一个Inpustream实现类,相当于Decorator类BufferInputstream是具体的装饰器类,继承自FilterInputStream装饰器类,提供了具有特有的缓冲功能的特点
6.2 适配器
6.1.1 概念
将一个不兼容的接口适配成期望的接口,以方便使用
6.1.2 适配器角色
Target(目标接口):所要转换的所期待的接口
Adaptee(源角色):需要适配的类
Adapter(适配器):将源角色适配成目标接口,一般持有源接口的引用(或者继承源接口),且实现目标接口。
Client(客户类):通过目标角色获取服务
6.1.3 IO流中适配器的使用
适配器角色就是InputStreamReader,
被适配的角色是InputStream类的实例对象,目标接口是Reader类。
可以看到,InputStreamReader实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char 要经过编码。
适配器在IO中的体现:将InputStream实现类通过InputStreamReader装换类适配成Reader接口实现类,将OutputStream基类实现类通过OutputStreamWriter适配成Writer基类的实现类
7. JAVA8新特性
7.1 lambda表达式
1、一个lambda表达式的可以有零个或者多个参数
2、参数的类型可以明确声明,也可以根据上下文进行推断
3、所有的参数都是在圆括号中,(int a)和(a) 表达的含义是一样的
4、参数可以为空 例:()->{}
5、lambda表达式的主体可以包含零条或者多条语句,只有一条语句时,可以省略{}号,如果 有多条语句需要加上{}
7.2 stream流(流操作方法)
7.2.1 创建流方法
7.2.2 操作流方法
7.2.3 终止流方法
今天也要好好学习呀~
以上是关于java----IO的主要内容,如果未能解决你的问题,请参考以下文章