A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路文龙 中级黑马   /  2015-3-8 15:53  /  774 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 路文龙 于 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();
//………
                }
  
  
七、为什么要有缓冲流
缓冲流:“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写
的效率。
  
         

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马