一、什么是流? 流:输入和输出
如何从能够发送字节序列的任何数据源取得输入 如何将输出发送到能够节收字节序列的任何目的地 二、流的分类:
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) {
2).通过Scanner类扫描一行:
Scanner in = new Scanner(System.in);
if (in.hasNextLine()) { //通过hasNextLine方法检验是否存在一行,并返回一个boolean值 String s = in.nextLine();
//………
}
七、为什么要有缓冲流
缓冲流:“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写
的效率。
//通过readLine()方法读取一个文本行,返回boolean类型值
fs.println(s); } br.close();
因篇幅问题不能全部显示,请点此查看更多更全内容