layout: post
title: Java IO流总结
tags:
io体系 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable
而且构建出的庞大io类库体系使用了装饰者模式设计
java的io体系可以分为流式和非流式和其他类
java的流按照输入输出可以分为输入流输出流,按照输入输出内容分为字节流和 字符流
有四个抽象类:
注:为什么会有两种类型呢?Java中字符是以Unicode形式存储的,一个字符占用两个字节,然而InputStream和OutputStream都是以字节形式读取或写出数据的,会将一个字符拆分成两个字节来读写这样会造成乱码(比如读取或者写出中文)
粗体部分是节点流,其他就是常用的处理流。
流分类 | 使用分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer | |
节点流 | 访问文件 | FileInputStream | FileOutStream | FileReader | FileWriter |
节点流 | 访问数值 | ByteArrayInputStream | ByteArrayOutStream | CharArrayReader | CharArrayWriter |
节点流 | 访问管道 | PipedInputStream | PipedOutStream | PipedReader | PipedWriter |
节点流 | 访问字符串 | StringReader | StringWriter | ||
处理流 | 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
处理流 | 转换流 | InputStreamReader | OutputStreamWriter | ||
处理流 | 对象流 | ObjectInputStream | ObjectOutputStream | ||
处理流 | 抽象基类(过滤) | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
流分类 | 使用分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|---|
处理流 | 打印流 | PrintStream | PrintWriter | ||
处理流 | 推回输入流 | PushbackInputStream | PushbackReader | ||
处理流 | 特殊流 | DataInputStream | DataOutputStream |
FileOutStream FileWriter 在自定true 来追加内容
StringWriter的 void write(String str)方法 写入一个字符串。
BufferedReader的 String readLine() 方法 读取一个文本行。
InputStreamReader InputStreamReader(InputStream in,String charsetName) 创建使用指定字符集的 InputStreamReader 可以用来处理中文编码问题
OutputStreamWriter OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的 OutputStreamWriter 可以用来处理中文编码问题
InputStream OutputStream 字节输入输出流常用的读取方法 如下:
byte[] in = new byte[1024];
int len = -1;
while((len = InputStream.read(in))>0){//将读出的字节存放在in字节数组中 并返回读取长度 如果已到达
//System.out.println(new String(in,0,len)); //文件末尾,则返回 -1。
OutputStream.write(in,0,len);//写入一个字节数组in 从位置0开始读到len
}
Reader Writer 字符输入输出流常用的读取方法 将字节的读取方法中的字节数组改成字符数组就可以了
byte[] in = new byte[1024];
int len = inputStream.read(in);
String message = new String(in,0,len);
原文:https://www.cnblogs.com/Tamako/p/11485011.html