字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
以上四个流都是抽象流)(但不是抽象类),一般咱们使用的都是它们的子类(注意是一般,这四个抽象类也能用,只是用得少)。java
而实际编程中会使用到的:编程
字节流 | 字符流 | |
输入流 | FileInputStream(文件(字节)输入流) | FileReader |
输出流 | FileOutputStream | FileWriter |
字节流 | 字符流 | |
输入流 | BufferedInputStream | BufferedReader |
输出流 | BufferedOutputStream | BufferedWriter |
缓冲流能够提升数据传输的速度数组
输入流 | InputStreamReader(字节流转换成字符流) | OutputStreamReader |
输出流 | InputStreamWriter | OutputStreamWriter |
用处例子:编程实现把用户从键盘输入的字符保存到一个String对象中。app
数据流 | |
输入流 | DataInputStream(数据输入流) |
输出流 | DataOutputStream(数据输出流) |
数据流能够把基本类型数据的二进制直接读入或写出。url
用处例子:编程实现把long类型数据写入到byte数组。 而后再从byte数组中把该数据读出。spa
Print流 | |
输入流 | PrintStream |
输出流 | PrintWriter |
Print流能够把基本数据类型的数据格式化后的字符串输出。code
用处例子:编程实现把键盘输入的数据写入A文件,若是输入有误,则把出错信息写入B文件。对象
注意:ci
字节输出流(OutputStream)和Print流不能同时使用,若是同时使用的话会报错。字符串
Object流 | |
输入流 | ObjectInputStream |
输出流 | ObjectOutputStream |
Object流能够把一个对象直接写入或读出。
这六种流每每是一套组合拳,举例:
// 使用IO流读取数据 BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn .getInputStream())); while ((line = buffer.readLine()) != null) { sb.append(line); }
获取字符序列后,经过InputStreamReader将字符序列转换成字节序列,可是因为字节序列不方便被操做,因此再套在BufferedReader(缓冲输入流)上。由于缓冲输入流这个类中有readLine()这个成员方法,这个方法能够一行一行地读取文件中的数据。