IO流概述:
纯文本数据优先使用字符流,其余均使用字节流。
字节流:
输入流:从文件读取到程序中
-
InputStream 是所有字节输入流的父类;
-
ByteArrayInputStream: 从byte数组读取数据;
-
StringBufferInputStream: 从stringbuffer中读取数据;
-
FileInputStream: 从本地文件中读取数据;
-
PipedInputStream: 从其他线程共用的管道中读取数据;
-
ObjectInputStream、FilterInputStream: 装饰流;
输出流:从程序中写入到文件中
OutputStream: 是所有字节输出流的父类;
ByteArrayOutputStream:从byte数组写入数据;
FileOutputStream:从本地文件中写入数据;
PipedOutputStream:从其他线程从用的管道写入数据;
ObjectOutputStream、FilterOutputStream:装饰流;
节点流:直接与数据源相连,读取或写入(读写不方便)
常用的节点流:
父类:InputStream、OutputStream、Reader、Writer;
文件:FileInputStream、FileOutputStream、FileReader、FileWriter;
数组:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter;
字符串:StringReader、StringWriter
管道:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter;
处理流:在节点流的基础上在套接一层,套接在节点流上的就是处理流;
- 流的链接:一个流对象经过其他流的多次包装;
常用的处理流:
缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter:增加缓冲功能,避免频繁读写磁盘;
转换流:InputStreamReader、OutputStreamReader:字节流和字符流之间的转换;
数据流:DataInputStream、DataOutputStream:将提供的基础数据类型写入或读取;
转换流:
- InputStreamReader、OutputStreamWriter需要使用InputStream或者OutputStream作为参数,实现字节流到字符流的转换;
- 构造函数:
InputStreamReader(InputStream);//使用系统默认编码GBK
InputStreamReader(InputStream,String charset);//可以指定编码
OutputStreamWriter(InputStream);//使用系统默认编码GBK
OutputStreamWriter(InputStream,String charset);//可以指定编码
在实际操作中,所有的IO操作都应该放在子线程中操作,避免堵住主线程。