------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
作用:IO是用于在计算机设备间进行数据传输的操作。
分类:根据流向分,可分为:
输入流-->读取数据
输出流-->写出数据
IO流基本结构如下图:
基本IO流:
字节流:
字节流是一次读取一个字节,可以用于处理所有的类型数据,比如:图片, MP3,AVI视频文件。字节流是最基本的,所有的字节输入流和字节输出流的子类都是,主要用在处理二进制数据,它是按字节来处理的。
|--字节输入流-->InputStream-->所有字节输入流的超类
字节流--|
|--字节输出流-->OutpurStream-->所有字节输出流的超类
特点:InputStream和OutputStream都是抽象类,不能被实例化,实现这两个类就要通过其具体子类去实现。
字符流:
字符流是一次读取两个字节,是专用于处理文本文件,所以只能处理文本文件,对于读写中文字符是十分方便(因为中文对应的字节数是两个,在UTF-8码表中是3个字节)。
|--字符输入流-->Reader-->所有字符输入流的超类
字符流--|
|--字符输出流-->Writer-->所有字符输出流的超类
特点:Reader和Writer都是抽象类,不能被实例化,实现这两个类就要通过其具体子类去实现。
其它IO流:
一、缓冲流:
该类型对字节流或字符流的对象(子类对象)进行封装,提高了读写数据的效率。
字节输入流:BufferedInputStream bis = new BufferedInputStream(new InputStream(null));
字节输出流:BufferedOutputStream bos = new BufferedOutputStream(new OutputStream(null));
字符输入流:BufferedReader br = new BufferedReader(new Reader(null));
字符输出流:BufferedWriter bw = new BufferedWriter(new Writer(null));
特点:
1、BufferedReader有一次读取一个文本行的方法readLine();
2、BufferedWriter 有一次写入一个行分隔符的方法newLine();
二、转换流:
因为字节流操作中文数据不是特别的方便,所以就出现了转换流,它是字节流转成字符流的桥梁,作用就是把字节流转换成字符流来使用。
|--字节输入流转成字符输入流-->InputStreamReader-->父类是Reader
转换流--|
|--字节输出流转成字符输入流-->OutputStreamWriter-->父类是Writer
特点:
1、转换流本身就是一个字符流: 字符流 = 字节流+编码表。
2、 转换流与编码有着一定的关系。
三、数据操作流:
该流是对基本数据类型的数据进行读写操作,不需要再进一步进行转换,通常只要操作基本数据类型的数据,就需要通过DataStream进行包装。
|--DataInputStream-->父类是FilterInputStream
DataStream--|
|--DataOutputStream-->父类是FilterOutputStream
特点:
DataOutputStream写出数据后,我们直接打印出来是读不懂的,只有用DataInputStream读取数据后打印才能读懂。
四、内存操作流:
该流用于处理临时存储的数据信息,等程序一结束,数据就从内存中消失。
分类:
1、字节数组:
ByteArrayInputStream,ByteArrayOutputStream
2、字符数组:
CharArrayReader,CharArrayWriter
3、字符串:
StringReader,StringWriter
特点:
内存操作流写入数据时,缓冲区会随着数据的不断写入而自动增长。内存操作流的close()方法无效。
五、打印流:
该流只能写出数据,不能读取数据,并且可以操作任意类型的数据,也可以直接操作文本文件。
|--字节打印流-->PrintStream-->父类是OutputStream
打印流--|
|--字符打印流-->PrintWriter-->父类是Writer
特点:
如果启动了自动刷新,能够自动刷新:
PrintStream ps = new PrintStream(new OutputStream(null),true);
PrintWriter pw = new PrintWriter(new Writer(null),true);
六、随机访问流:
RandomAccessFile类不属于流,是Object类的子类。但是它又融合了InputStream和OutputStream的功能,能对文件的进行随机访问读取和写入。
特点:
RandomAccessFile类在一个类中既能读取又能写入,只需要创建一个RandomAccessFile对象就行。
七、合并流:
SequenceInputStream类可以将多个输入流合并为一个输入流,表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
七、序列化流:
序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。
对象-->流数据 ObjectOutputStream-->父类OutputStream
反序列化流:把文本文件中的流对象或者网络中的流对象数据还原成对象。
流数据-->对象 ObjectInputStream-->父类InputStream
特点:
1、要被序列化或者反序列化的对象,都必须要实现Serializable接口。
2、被序列化或者反序列化的对象ID地址会随着内容的修改而改变,而实际开发中我们需要保存以前的值,所以就要固定对象ID地址:private static final long serializableUID = xxxL;。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------