【LSP】IO流

wa684572   ·   发表于 6个月前   ·   编程代码

IO流的分类

按流的方向分:输入流,输出流
读取数据的方式
按照字节读取 字节流
按照字符读取 文本流
java中所有的文件读取相关的类都是在java.io包下,同时所有的IO流类都实现了Closeable接口,这意味着所有流在使用以后都需要关闭。

所有的输出流实现了Flushable。输出流在输出完成之后一定要flush将管道中剩余的数据写入文件。

字节流
java.io.InputStream

java.io.OutputStream

以上两个抽象类代表字节流。所有继承自这两个接口的都是字节流。

FileInputStream
文件字节输入流,使用read方法读取文件。每次读取一个字节并返回。读到文件末尾了,就返回-1。缺点是一次读取一个字节,硬盘交换频繁,效率低

或者提供一个字节数组参数,当read方法每次读取时将会把读到文件装入提供的字节数组中,当返回-1时,以读取完文件。

available方法 获取还没有读取的字节数。可以利用这个方法一次性读取文件内容,但是该方法不适合于大文件。

skip方法 提供一个参数,跳过指定数量的字节

FileOutputStream
new FileOutputStream(name, isAppend)
文件输出流,第一个参数提供需要打开的文件名,第二个参数标志是否需要以追加方式打开。

write 当提供一个参数时写入一个字节数组。文件不存在时,自动新建,如果文件存在,根据参数判断是追加写入还是覆盖重写。

write(arr, offf, len) 将数组的一部分写入

字符流
java.io.Reader

java.io.Writer

以上两个抽象类代表字符流,所有继承自这两个接口的流都是字符流。

FileReader
字符文件输入流,基本使用参数和比特文件输入流差不多。只不过数据以字符数组的形式装载。

FileWriter


字节转换流
InputStreamReader

OutputStreamWriter

该流将字节流转换称为字符流

包装流
当一个流的构造方法中需要一个流的时候,作为参数的流称为节点流,外部负责包装的称为包装流,被构造的流称为包装流

缓冲包装流
缓冲包装流自带一个缓冲,同时还可以在构造是指定缓冲大小,但是大多数时候,缓冲大小都足够了。

自带缓冲,也就是自带读取的那个装载数组。在使用read方法的时候,尽管你可以读取一个字节或者字符,但是对于包装流来说它还是从他的缓冲中取出的。缓冲流的默认缓冲大小为1024*8个字节/字符。

BufferedReader

BufferedWriter

BufferedInputStream

BufferedOutputStream

原始数据写入包装流
DataInputStream

DataOutputStream

例如:

0 Reply   |  Until 6个月前 | 1723 View
LoginCan Publish Content