前言

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
在Java中, I/O 广泛地应用到文件传输和网络编程中。

一、IO流

什么是IO流?

它是一种数据的流,从源头流到目的地。比如文件拷贝,输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。

Java IO中常用的类

java中io流文件内容怎么反转 java 流文件_java中io流文件内容怎么反转

具体解释:
 1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
 
 2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

 3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

 4.Reader(文件格式操作):抽象类,基于字符的输入操作。

 5. Writer(文件格式操作):抽象类,基于字符的输出操作

Java 中 IO 流分为几种?

按功能来分:输入流(input)、输出流(output)。

按类型来分:字节流(reader)和字符流(writer)。

字节流和字符流的区别是:

字节流按 8 位传输以字节为单位输入输出数据

字符流16 位传输以字符为单位输入输出数据。

字节流继承inputStream和OutputStream

字符流继承自InputSteamReader和OutputStreamWriter

具体读写文件说明:

java中io流文件内容怎么反转 java 流文件_java中io流文件内容怎么反转_02

字节流和字符流的区别?缓冲区(内存)

实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,
而字符流在操作时使用了缓冲区,通过缓冲区再操作文件

字符流使用了缓冲区,而字节流没有使用缓冲区。

什么是序列化和反序列化?

序列化:把对象转换为字节序列的过程称为对象的序列化。(对象==>字节)
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。(字节==>对象)
实现序列化的方法:实现Serializable接口即可
序列化的目的:保存对象在内存中的状态;也可以说是实例化变量,方便对象的传输
例如,要将 java 对象存储到硬盘或者传送给网络上的其他计算机,就用到了序列化

FileInputStream和FileOutputStream是什么?

1)这是在拷贝文件操作的时候,经常用到的两个类。
2)在处理小文件的时候,它们的性能表现还不错,在大文件的时候,最好使用BufferedInputStream(或BufferedReader)和BufferedOutputStream(或BufferedWriter)

附:

1.在文件拷贝的时候,哪一种流可用于提升更多的性能?

1)在字节流的时候,使用BufferedInputStream和BufferedOutputStream。
2)在字符流的时候,使用BufferedReader和BufferedWriter。

2.BIO、NIO、AIO 有什么区别?

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

二、File类

1)它不属于IO流,也不是用于文件操作的。
2)它主要是用于获取一个文件的属性、读写权限、大小等信息。

Files的常用方法都有哪些?

Files. exists():检测文件路径是否存在。
Files. createFile():创建文件。
Files. createDirectory():创建文件夹。
Files. delete():删除一个文件或目录。
Files. copy():复制文件。
Files. move():移动文件。
Files. size():查看文件个数。
Files. read():读取文件。
Files. write():写入文件。

附:学习Java文件操作链接