IO
IO是Input和Output的的缩写,即输入/输出,它是一种流式的数据输入和输出的模型;
Input把外部数据读到内存,Output把内存当中的数据输出到外部;
由于代码在内存中运行,所以代码运行过程中需要的数据也需要读取到内存中,并将数据以某种数据类型表示以方便代码处理;
由于内存的大小有限,要处理的任务多,所以需要在数据处理完成后,将数据输出到某个地方并保存;
流
一个流可以理解为一个数据序列,输入流表示从一个源读取数据,输出流表示向一个目标写数据;
IO流按顺序读写数据,根据IO流模式,数据进行单向的流动;
java.io包为I/O操作提供强大而灵活的支持,可以对输入和输出进行操作,并且支持多种格式的数据流的处理;
InputStream/OutputStream
InputStream和OutputStream是java.io包提供的读写二进制数据的同步IO功能,IO流的最小单位为字节(byte),也称为字节流;
InputStream代表输入字节流,OutputStream代表输出字节流,它们是最基本的字节流;
FileInputStream
InputStream是java.io包提供的最基本的输入流,它是一个抽象类,是所有输入流的超类;
FileInputStream是InputStream类的子类,它实现了InputStream中定义的方法,用于从文件流中读取数据;
FileOutputStream
对应于FileInputStream,FileOutputStream是OutputStream的子类,用于向文件写入数据;
Reader/Writer
若流读写的最小数据单位为字符(char),则这种流称为字符流;
Java.io提供Reader和Writer可用于进行字符流的读写;
Reader和Writer本质上是能自动编码/解码的InputStream和OutputStream;
同步和异步
同步IO指当进行读写操作时,代码必须等待数据返回后才继续执行后续的代码;
异步IO指当进行读写操作时,发出请求就立刻执行后续代码;
相比于同步IO,异步IO可以提高CPU的执行效率但实现起来比较复杂;
Java提供java.io包来实现同步IO,java.nio包实现异步IO;
文件
文件是计算机系统中重要的存储数据的方式,java.io包提供了File类来实现对文件和目录的操作;
创建File对象
File类既可以用于处理文件,又可以处理用于组织文件的目录,使用时需要先创建一个File对象;
File f=new File([file_path])
创建File对象时,需要传入文件在系统当中的路径,路径可以是绝对路径,也可以是相对路径;
在Windows操作系统中,使用 \ 作为路径的分隔符,在Linux操作系统中使用的是 / 作为路径的分隔符;
在Java字符串当中,分隔符 \ 需要转义,所以会被写为 \\ ;
. 表示当前目录,.. 表示上级目录;
创建File对象本身不涉及IO操作;
读写文件
FileInputStream和FileOutputStream可以用于读写文件,进行文件读写操作前需要先创建一个流对象;
//创建输入流对象用于读取文件
InputStream f = new FileInputStream([filepath]); 或 File f = new File([filepath]); InputStream in = new FileInputStream(f);
//创建输出流对象用于写数据至文件
OutputStream f = new FileOutputStream([filepath]); 或 File f = new File([filepath]); OutputStream in = new FileOutputStream(f);
序列化
序列化是Java对象转换成二进制数据(byte数组)的过程,序列化之后即可将二进制数据保存到文件中或通过网络传输;
反序列化
与序列化相反,反序列化就是把二进制数据转换为Java对象的过程;