本帖最后由 路文龙 于 2015-3-8 17:16 编辑
【资源分享】
一、什么是流?
流:输入和输出
如何从能够发送字节序列的任何数据源取得输入
如何将输出发送到能够节收字节序列的任何目的地
二、流的分类:
1) 按数据流的方向不同可以分为输入流和输出流
输入流:指一个可以读取自己序列的对象
输出流:指一个可以写入字节序列的对象
2) 按处理数据单位不同可以分为字符流和字节流
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
抽象类 Reader 、 Writer 的读入和写出操作都是基于两字节的 Unicode 码元的。
read 和 write 方法在执行时都将阻塞,直至字节确实被读入或写出。
3) 按功能不同可以分为节点流和处理流
节点流可以从一个特定数据源(节点)读取数据
处理流是连接在已存在流之上,通过对数据的处理为程序提供更为强大的读写功能
三、 四类常用流的结构
1) InputStream:
a) FileInputStream;//文件相关类
b) PipedInputStream ;//管道相关类
c) FilterInputStream;//过滤流:
i. LineNumberInputStream
ii. DataInputStream
iii. BufferedInputStream
iv. PushbackInputStream
d) ByteArrayInputStream//内存流
e) SequenceInputStream//序列相关流
f) StringBufferInputStream//字符相关流
g) ObjectInputStream //对象相关流
2) OutputStream:
a) FileOutputStream;//文件相关类
b) PipedOutputStream ;//管道相关类
c) FilterOutputStream;//过滤流:
i. DataOutputStream
ii. BufferedOutputStream
iii. PrintStream
d) ByteArrayOutputStream//内存流
e) ObjectOutputStream //对象相关流
3) Reader:
a) BufferedReader
i. LineNumberReader
b) CharArrayReader
c) FilterReader
i. PushbackReader
d) InputStreamReader
i. FileReader
e) PipedReader
f) StringReader
4) Writer:
a) BufferedWriter
b) CharArrayWriter
c) OutputStreamWriter
i. FileWriter
d) FilterWriter
e) PipedWriter
f) StringWriter
g) PrintWriter
四、节点流的相关类型
节点流(最低级的那个流)程序用于直接操作目标设备所对应的类叫节点流类
1) 文件相关
按字节:FileInputStream、FileOutputStream
按字符:FileReader 、FileWriter
2) 内存相关
按字节: ByteArrayInputStream、ByteArrayOutputStream
按字符: CharArrayReader 、CharArrayWriter
按字符串:StringReader 、StringWriter
3) 管道相关
按字节: PipedInputStream、PipedOutputStream
按字符: PipedReader 、Pipe的Writer
五、包装流(处理流、过滤流) 是对一个已存在的流的连接和封装,通过所封装的流的
功能调用实现数据读写
1) 缓冲相关(可以大幅提升性能)
按字节: BufferedInputStream、BufferedOutputStream
按字符: BufferedReader 、BufferedWriter
2) 过滤处理
按字节: FilterInputStream、FilterOutputStream
按字符: FilterReader 、FilterWriter
3) 字节转化成字符
输入: InputStreamReader
输出: OutputStreamWriter
4) 对象序列化处理(要求放在流中的对象一定是实现Serializable接口)
输入: ObjectInputStream
输出: ObjectOutputStream
5) 数据转化处理(可以读写4类8中类型(包含String)的数据)
输入: DataInputStream
输出: DataOutputStream
6) 计数处理(不使用了)
按单位: LineNumberInputStream、LineNumberReader
7) 提取预处理(先试穿后买)
按单位: PushbackInputStream、PushbackReader
思路:
先试穿:int b = pis.read();
再退回:pis.unread();
打算买就不用调用unread方法
8) 打印处理(输出流、支持多种数据格式(基本类型和String)输出)
按单位: PrintStream、PrintWriter
六、 如何从屏幕上获取一行?
1).BufferedReader缓冲输入流(String readLine()):
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while ((s = br.readLine()) != null) {
//通过readLine()方法读取一个文本行,返回boolean类型值
fs.println(s);
}
br.close();
2).通过Scanner类扫描一行:
Scanner in = new Scanner(System.in);
if (in.hasNextLine()) {
//通过hasNextLine方法检验是否存在一行,并返回一个boolean值
String s = in.nextLine();
//………
}
七、为什么要有缓冲流
缓冲流:“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写
的效率。
|
|