Java IO流按流的方向分为输入流和输出流,按处理数据的类型分为字节流和字符流,按数据源分为节点流和处理流
字节流 | 字符流 | 备注 | |||
| 输入流 | 输出流 | 输入流 | 输出流 |
|
节点流 | FileInputStream | FileOutputStream | FileReader | FileWriter | 数据源为 File |
byte Array InputStream | ByteArrayOutputStream | Char ArrayReader | CharArrayWriter | 数据源为内存数组 | |
PipedInputStream | PipedOutputStream | PipedReader | PipedWriter | 数据源为Piped | |
|
| StringReader | StringWriter | 数据源为 String | |
处理流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter | 在原有流的基础上增加缓冲,提高效率 |
|
| InputStreamReader | Output StreamWriter | 提供字节流到字符流的转换,并指定 字符编码 | |
DataInputStream | DataOutputStream |
|
| 基本数据类型读写 | |
ObjectInputStream | ObjectOutputStream |
|
| 提供对象的序列化 | |
| PrintStream |
| PrintWriter | 打印流 | |
Sequence InputStream |
|
|
| 将多个流整合到一个流中 |
字节流:按字节处理数据,可以处理所有类型的数据(文本和 二进制 )。
字符流:按字符处理数据,只能处理文本,如果字符编码不匹配,还可能导致数据乱码。另外Writer一定要进行flush或close,数据才会真的写入到数据源中。
InputStream
int read(): 读取一个字节并返回,到达末尾返回-1
int read(byte b[]) :读取b.length个字节到byte数组中,到达末尾返回-1
int read(byte b[], int off, int len) :读取len个字节到byte数组off开始的位置,到达末尾返回-1
OutputStream
void write(int b):写一个字节
void write(byte b[]):将byte数组写入输出流
void write(byte b[], int off, int len):将b数组中off开始的len个字节写入输出流
Reader
int read():读取一个字符
int read(char cbuf[]):读取cbbuf.length个字符到 字符数组 中
int read(char cbuf[], int off, int len):读取len个字符到字符数组中
Writer
void write(int c):写入一个字符
void write(char cbuf[]):将cbuf写入输出流
void write(char cbuf[], int off, int len): 将cbuf off开始的len个字符写入输出流
void write(String str):写入 字符串
void write(String str, int off, int len):写入字符串off开始的len个字符