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.具体流

  1. 文件操作字节流:FileInputStream/FileOutputStream
  2. 文件操作字符流:FileReader/FileWriter
  3. 缓冲流:BufferInputStream/BufferOutputStream
  4. 转换流:InputStreamReader/OutputStreamWriter
  5. 对象流:ObjectInputStream/ObjectOutputStream

4.序列化

概念

  1. 将对象实例保存到磁盘的过程就是序列化
  2. 反序列化是将磁盘中的数据解析为对象实例的过程
  3. seriaVersionUID:序列化的版本号,由类名、方法名和属性等生成64位哈希值
  4. 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的主要内容,如果未能解决你的问题,请参考以下文章