流的概念:程序与数据来源之间的桥梁 流的分类: 按数据方向分:输入流和输出流 输入流:InputStream/Reader OutputStream/Writer 按数据类型分:字节流和字符流 字节流:InputStream/OutputStream 字符流:Reader/Writer 按流的功能分:节点流和处理流 节点流用操作数据的来源。 处理流用来封装节点流,从而给节点流增加一个功能,不能独立存在,在关闭流时如果使用了处理流,只需关闭最外层的流就可以了。 区分节点流和处理流的小方法: 看构造器,节点流参数为数据来源,而处理流参数为其他流。 选择流的思路: 先考虑是输入流还是输出流, 再考虑是字节流还是字符流, 最后考虑是节点流还是处理流。 字符流:Reader和Writer所有字符流的父类型 Java技术使用Unicode来表示字符串和字符,而且提供16位版本的流,以便用类似的方法处理字符。 如果构造了一个连接到流的Reader和Writer,转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。 桥梁流:InputStreamReader和OutputStreamWriter(字节流转化成字符流的桥转换器) 这两个类不是用于直接输入输出的,他是将字节流转换成字符流的桥转换器,并可以指定编解码方式。 逐行读写流:BufferedReader/BufferedWriter 以上两个都是过滤流,需要用其他的节点流来作参数构造对象。 BufferedReader的方法:readLine():String ,当他的返回值是null时,就表示读取完毕了。要注意,再写入时要注意写换行符,否则会出现阻塞。 BufferedWriter的方法:newLine() ,这个方法会写出一个换行符。 管道流:线程交互的时候使用 (J2ME中不支持) PipedInputStream/PipedOutputStream 传送输出流可以连接到传送输入流,以创建通信管道。传送输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。 注意:管道输出流和管道输入流需要对接。 数据流:DataInputStream和DataOutputStream 通过流来读写Java基本类,注意DataInputStream和DataOutputStream的方法是成对的。 支持直接输出输入各种数据类型。 注意:使用DataOutputStream/DataInputStream时,要注意写入顺序和读取顺序相同,否则会将没有分割写入的信息分割不正确而读取出错误的数据。 Properties类:针对属性文件(*.properties,内容是name=value,都是作为键值对出现)进行操作,在java.util包下 (J2ME中不支持) load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 getProperty(String key) 用指定的键在此属性列表中搜索属性。 |