IO流

Posted fkx1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流相关的知识,希望对你有一定的参考价值。

 

01.File

创建文件 删除文件 修改文件 显示文件信息

02.字节流 字节输入流:抽象类InputStream,实现类FileInputStream

字节输入流操作步骤:

A:创建字节输入流对象

B:调用read()方法读取数据,并把数据显示在控制台

C:释放资源

 

03.字符流 Reader        Writer

flush()和close()的区别:

close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。

flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

BufferedWriter,newLine():根据系统来决定换行符

BufferedReader,String readLine():一次读取一行数据

 

04.缓冲流 字符流为了高效读写,也提供了对应的字符缓冲流。BufferedWriter:字符缓冲输出流,BufferedReader:字符缓冲输入流

05.二进制流   DataInputStream     DataOutputStream

06.序列化和反序列化    ObjectInputStream      ObjectOutputStream

07.序列化

序列化是将对象的状态写入到特定的流的过程

反序列化则是从特定的流中获取数据重新构建对象的过程

使用集合保存对象,可以将集合中的所有对象序列化

一个类的对象要想序列化成功 该类必须实现 java.io.Serializable 对象。

 

 

NIO

NIO包含以下核心组件

1.通道 2.缓冲区 3.选择

Channel用于在字节缓冲区和位于通道另一侧的实体(通常是文件或者套接字)之间以便有效的进行数据传输

Buffer  缓冲区

存储的是相同数据类型的数据集

本质是一个可以写入数据,并且从中读取数据的内存

  1. position:写入或者读取的数据的当前指针

最大值:capacity-1

  1. limit:有多少数据可以写或者可以读

write模式下,我们的limit和write模式下的position的值一致

Position变成0!

  1. capacity:缓冲区的最大容量
  2. Java NIO和IO的主要区别

IO

NIO

面向Stream

面向Buffer

阻塞IO

非阻塞IO

 

Selectors

Channel通道

01.基于缓冲区对数据进行读取或者是写入

02.通道是双向的,流是单向的

03,可以异步的读写

 

常用的实现:

01.FileChannel:从文件中读写数据

02.DatagerarmChannel:通过UDP读写网络中的数据

03.SocketChannel:通过TCP读写网络中的数据

04.ServerSockectChannel:可以监听新来的TCP链接,每进来一个都会创建一个新的ServerSockectChannel

 

内存映射:

  就是把文件映射到电脑中的内存中,通过操作内存从而达到操作文件的目的!

内存中操作是最快的

 

Java中读取文件的方式:

01.RandomAccessFile   随机读取,速度最慢

02.FileInputStReam      流的方式读取

03.BuFferReader        缓存的方式读取

04.MappedByteBuffer     内存映射,速度最快!

 

内存映射的三种模式:MapMode

01.READ_ONLY :对缓冲区的内存只读

02.READ_WRITE :对缓冲的内容读写

03.PRIVATE :只对缓冲的内容进行修改,不会影响到真实的文件

 

通常适用于文件的读取!一般不会涉及到文件的写入

 

 

文件锁:

LileLock:基于FileChannel对文件提供锁的功能!

共享锁:共享读的操作,只能有一个写操作,适合读取数据

独占锁:读写不能同时,只能有一个读或者一个写!适合写数据!

 

Lock():

无参的默认是独占锁;

有参的为共享锁

 

tryLock();

非阻塞

 

以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章

IO流之IO流综述

IO异常--缓冲流--转换流--序列化流( IO流2 )

IO流(序列流)

java中的io流都有哪些

java IO流 IO流概述

IO流