Java IO:即 Java 输入 / 输出系统。
Java 的 IO 模型设计非常优秀,它使用 Decorator (装饰者)模式,按功能划分 Stream ,您可以动态装配
这些 Stream ,以便获得您需要的功能。
Stream :JAVA 中将数据的输入输出抽象为流,流是一组有顺序的、单向的,有起点和终点的数据集
合。按照流中的最小数据单元又分为字节流和字符流。
IO 流用来处理设备之间的数据传输,Java 程序中,对于数据的输入/输出操作 都是以“流”的方式进行的。
java.io 包下提供了各种“流”类的接口,用以获取不同种类的数据,并通过标准的方法输入或输出数
据。
对于计算机来说,数据是以二进制形式读出或写入。我们可以把文件想象为一个桶,我们通过管道将桶
里的水抽出来。这里的管道也就相当于Java中的流。流的本质是一种有序的数据集合,有数据源和目的
地。
输入流:只能从内存中读数据
输出流:只能向文件中写数据
输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出:将程序(内存)数据输出到磁盘、光盘等存储设备中
-
InputStream :字节输入流
OutputStream :字节输出流
Reader :字符输入流
Writer :字符输出流
在日常工作中,字节流一般用来处理图像,视频,以及PPT,Word类型的文件。字符流一般
用于处理纯文本类型的文件,如TXT文件等,字节流可以用来处理纯文本文件,但是字符流不
能用于处理图像视频等非文本类型的文件。
1字符 = 2字节 、 1字节(byte) = 8位(bit) 、 一个汉字占两个字节长度
字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。
字符流:每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文。
节点流:
以从或向一个特定的地方(节点)读写数据。
文件流:
FileInputStream,FileOutputStrean,FileReader,FileWriter,它们都会直接
操作文件,直接与 OS 底层交互。因此他们被称为节点流 ,注意:使用这几个流的对象
之后,需要关闭流对象,因为 java 垃圾回收器不会主动回收。不过在 Java7 之后,可以
在 try() 括号中打开流,最后程序会自动关闭流对象,不再需要显示地 close。
数组流:
ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,
CharArrayWriter,对数组进行处理的节点流。
字符串流:
StringReader,StringWriter,其中 StringReader 能从 String 中读取数据并
保存到 char 数组。
管道流:
PipedInputStream,PipedOutputStream,PipedReader,PipedWrite,对管
道进行处理的节点流。
处理流:
是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
缓冲流 :
BufferedImputStrean,BufferedOutputStream,BufferedReader ,
BufferedWriter,需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初
始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用 flush 方法,另
外,BufferedReader 提供一个 readLine( ) 方法可以读取一行,而 FileInputStream 和
FileReader 只能读取一个字节或者一个字符,因此 BufferedReader 也被称为行读取
器。
转换流:
InputStreamReader,OutputStreamWriter,要 inputStream 或
OutputStream 作为参数,实现从字节流到字符流的转换,我们经常在读取键盘输入
(System.in)或网络通信的时候,需要使用这两个类。
数据流:DataInputStream,DataOutputStream,提供将基础数据类型写入到文件中,
或者读取出来。
以BufferedReader为例。处理流的构造方法总要带上一个其他的流对象做参数。一个流
对象会经过其他流的多次包装。
思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最
后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件
列表,创建、删除文件和目录等方法。
流都具有的共同特征。
出流都具有的共同特征。
的任意位置进行存取(输入输出)操作。
一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识
了。
字节输入流InputStream主要方法:
read() :从此输入流中读取一个数据字节。
read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
close():关闭此输入流并释放与该流关联的所有系统资源。
字节输出流OutputStream主要方法:
write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。
write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
write(int b) :将指定字节写入此文件输出流。
close() :关闭此输入流并释放与该流关联的所有系统资源。
字符输入流Reader主要方法:
read():读取单个字符。
read(char[] cbuf) :将字符读入数组。
read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。
read(CharBuffer target) :试图将字符读入指定的字符缓冲区。
flush() :刷新该流的缓冲。
close() :关闭此流,但要先刷新它。
字符输出流Writer主要方法:
write(char[] cbuf) :写入字符数组。
write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
write(int c) :写入单个字符。
write(String str) :写入字符串。
write(String str, int off, int len) :写入字符串的某一部分。
flush() :刷新该流的缓冲。
close() :关闭此流,但要先刷新它。
BufferedWriter类newLine() :写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。
BufferedReader类readLine() :读取一个文本行。
字节流与字符流的转换主要用于文本文件在硬盘中以字节流的形式存储时,通过InputStreamReader读
取后转化为字符流给程序处理,程序处理的字符流通过OutputStreamWriter转换为字节流保存。
转换流有哪些基本特点呢?