黑马程序员技术交流社区

标题: 【石家庄校区】IO流 [打印本页]

作者: 李皓321    时间: 2018-4-23 15:45
标题: 【石家庄校区】IO流
本帖最后由 小石姐姐 于 2018-4-25 15:48 编辑

day10 IO(标准输入流, 转换流, 打印流, 对象操作

流, Properties集合, 编码表)


IO流
|_ 标准流
            |_ System.in(InputStream)           键盘录入
            |_ System.out(PrintStream)         控制台输出
|_ 转换流
|_ OutputStreamWriter             以操作字符流的方式按字节流写出
|_ InputStreamReader              以操作字符流的方式按字节流读入
|_ 打印流
|_ PrintWriter                        具有自动刷新, 自动换行的特点
|_ 对象流
|_ ObjectInputStream           从文件中读入一个对象到内存中
|_ ObjectOutputStream        将内存中的对象写入到文件中
集合
|_ Properties 用于与IO流结合读取配置文件, 键值对形式, 实现Map(key-value)
乱码
|_ 乱码的原因: 多种编码表查错了
|_ 字符串编码的转换



# 体系结构:
字节流
|_ InputStream                            # 字节输入流
|          |_ FileInputStream           # 专门操作文件的字节输入流
|          |_ BufferedInputStream   # 带有缓冲区的字节输入流, 效率高
|          |_ ObjectInputStream      # 对象输入流
|
|_ OutputStream                         # 字节输出流
|_ FileOutputStream        # 专门操作文件的字节输出流
|_ BufferedOutputStream # 带有缓冲区的字节输出流, 效率高
|_ ObjectOutputStream    # 对象输出流
|_ PrintStream                  # 字节打印流
字符流
|_ Reader                                          # 字符输入流
|               |_ BufferedReader             # 带有缓冲区的字符输入流, 效率高
|               |_ InputStreamReader     # 将字节流转换为字符流输入的转换输入流
|                        |_ FileReader          # 专门操作文件的字符输入流
|
|_ Writer # 字符输出流
|_ BufferedWriter            # 带有缓冲区的字符输出流, 效率高
|_ OutputStreamWriter   # 将字符流转换为字节流输出的转换输出流
                           |_ FileWriter         # 专门操作文件的字符输出流
                 |_ PrintWriter                 # 字符打印流
标准输入输出流概述:
                    静态成员变量。
                      是PrintStream,  OutputStream 的子类, 属于字节输出流
                      是 InputStream 类, 属于字节输入流.  InputStream in =
                       System.in;               
              是PrintStream,  OutputStream 的子类, 属于字节输出流.
               OutputStream out = System.out;
OutputStreamWriter概述和使用: 文件内容打印到控制台:
1,   补充String类的相关方法
              构造方法 (作用: byte[] 转 String)
                       String(byte[] bys, int index, int length) : 使用byte数组的一部
                       分按照系统默认编码表(GBK)创建String, 即将byte数组转为
                       String
              成员方法 (作用: String 转 byte[])
                       byte[] getBytes() : 按照默认编码表获取字符串的byte数组, 即
                       将String转为byte数组
2,OutputStreamWriter 类:
              是 Writer 的子类, 属于字符输出流. 是字符流通向字节流的桥梁
              作用:
                    以写出字符流的方式编写代码(char, char[], String), 而底层以字
                      节流写出到文件(byte, byte[])实现这种转换:  Writer ->
                      OutputStreamWriter -> OutputStream
打印流概述
对象操作流概述:
      构造方法
ObjectInputStream(InputStream in) : 创建对象输入流
成员方法
Object readObject() : 从对象输入流读取对象, 一次只读取一个对象. 当读不到时抛出EOFException .
          2,ObjectOutputStream
构造方法
    ObjectOutputStream(OutputStream out) : 创建对象输出流
成员方法
     void writeObject(Object o) : 将对象写入对象输出流
                 读写任意类型的对象
             序列化: 将对象的信息转换为可存储的信息的过程
Properties概述
             构造方法
                   Properties() : 创建对象
             成员方法
在配置文件中的保存形式是每行一个 键=值
# 是注释
         注意:
                 注意: 如果配置文件保存为 .txt , 使用Eclipse打开会变成
                         GBK 编码, 可以显示中文. 但一般都存为 .properties
                       , 使用 ISO-8859-1 , 显示不了中文
Properties和IO流结合的功能
void load(InputStream in) : 从字节输入流中读取Properties
void load(Reader reader) : 同上, 只是流不同
      2,从Properties集合写出到配置文件
           无论是否有注释, 都会自动添加时间字符串
            无论是否有注释, 都会自动添加时间字符
         写出到文件
               创建Properties对象, 添加键值对, 使用 list() 或 store() 保存
               到文件中
        从文件读取
               创建Properties对象, 使用 load() 从文件加载数据, 使用
              getProperties() 根据指定键获取值, 或使用遍历Map的方式
              遍历所有键和值
编码表
作用:
        将计算机二进制数据转换为不同语言的字符
常见种类:
ASCII:美国标准码,包含26个英文字母的大写和小写,数字,符号
ISO-8859-1 : 西方语言编码
GB2312 : 国标码
GBK : 国标扩展码
Unicode : 万国码. 支持多国语言字符.
UTF-8 : Unicode的一种实现方式, 长度可变的码表, 一个字符占用1
           个或2个或3个字节
ANSI : 本地编码表. 根据系统设置决定编码表






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2