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 缓冲区
存储的是相同数据类型的数据集
本质是一个可以写入数据,并且从中读取数据的内存
- position:写入或者读取的数据的当前指针
最大值:capacity-1
- limit:有多少数据可以写或者可以读
在write模式下,我们的limit和write模式下的position的值一致
Position变成0!
- capacity:缓冲区的最大容量
- 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流的主要内容,如果未能解决你的问题,请参考以下文章