2

Io流阶段大总结

 3 years ago
source link: http://www.cnblogs.com/859630097com/p/14220414.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

字节流结构

输入流:

imayEzv.png!mobile

ObjectInputStream:从文件中读取对象

FileInputStream:从文件中输入(读)字节

BufferedInputStream:底层有缓冲数组,在不定义数组的情况下,提高输入(读)效率

输出流:

AfQbyqb.png!mobile

ObjectOutStream:

经一个对象写入文件

FileOutputStream:

将数据输出(写)文件

BufferedOutputStream:

底层有缓冲数组,再不定义数组情况下,提高输出(写)效率

字符流结构图

输入流:

YJvui2B.png!mobile

FileReader:

输入(读)文本文件的数据

BuffereReader:

底层有缓冲数组,在不定义数组情况下,提高输入(读)效率,同时有特有readLine()方法,一次可以读取一整行数据

InputStreamReader:

是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符.它使用的字符集可以有名

称指定, 也可以被明确指定,或者使用平台的默认字符集

输出流:

aEv2y27.png!mobile

FileWriter:

将数据输出(写)到文本文件

BufferedWriter:

底层有缓冲数组,再不定义数组的情况下,提高写入效率.同时有特有newLine()方法输出跨平台换行

OutputStreaWriter:

是从字符流到字节流的桥梁:使用指定的charset将其解码为字节,它使用的字符集可以是由名称指定,

也可以被明确指定,或者可以接受平台默认的字符集

字节流常用方法

FileInputStream,BufferedInputStream:

  • int read():读取一个字节

  • int read(byte[]b):读取一个字节数组

  • void close:释放文件(关流)

FileOutputStream、BufferedOutputStream:

  • void write(int b):写入一个字节

  • void write(byte[]b):写入一个字节数组

  • void write(byte[]b,int off(开始位置),int len(个数)):写入一个字节数组,从off开始,写入len个

  • void close:释放文件(关流)

ObjectInputStream:

  • Object readObject():读取一个对象

  • void close:释放文件(关流)

ObjectOutputStream:

  • void writeObject(Object obj):写入一个对象

  • void close:释放文件(关流)

字符流常用方法

FileReader、BufferedReader、InputStreamReader:

  • int read():一次读取一个字符

  • int read(char[]char):一次读取一个字符数组

BufferedReader特有方法:

  • String readLine():读取一整行

FileWriter、BufferedWriter、OutputStreamWriter:

  • void write():写入一个字符

  • void write(char[]char):写入一个字符数组

  • void write(char[]char,int off(开始位置),int len(个数)):写入一个数组的一部分,开始位置off,写入个数len

  • void write(String str):写一个字符串

  • void write(String str,off(开始位置),len(个数)):写一个字符串一部分,开始位置off,写入个数len

  • void flush():刷新流

  • void close():释放文件

BufferedWriter特有方法:

  • void newLine:跨平台通用换行

Properties集合与Io流集合的方法:

  • void load(Reaner reader):将字符输入流中的数据加载到Properties对象中

  • void store(Writer writer,String comments):将Properties集合中的数据存入字符输出流

注意事项

  • flush():

刷新流,之后还可以继续写数据

  • close():

关闭流,释放资源,但是关闭之前会先写出数据.一旦关闭,就不能再写数据了

  • 关流操作应定要放在try-catch-finally中的finally中:

    • 被finally控制的语句一定会被执行,不管有没有异常,也不管异常有没有被捕获

    • 即使finally中包含continue,break,return,try块结束后,finally块也依旧会执行

  • 使用字节输出流注意事项:

    • 如果文件不存在就创建

    • 写整数时,实际写出的是整数对应码表的字母

    • 使用完必须释放资源

    • 表示文件的路径名称必须存在

  • 使用字符输出(写出)流注意事项:

    • 创建字符输出流对象时如果文件不存在就创建,存在就清空

    • 写数据时:

      • 写int就是写的ASCLL码表中对应的字节

      • 写字符串就是将字符串原样输出

    • 必须释放资源

  • 使用字符流(输入)读取数据注意事项:

    • 文件必须要存在

    • 必须释放资源

  • 对象操作流注意事项:

    • 如果想要这个类能被序列化,那么这个类必须实现一个接口Serializable

    • Serializable是一个标记接口,实现给接口不需要重写任何方法

    • 静态成员不加transient关键字都会被序列化

    • serialVersionUID 指定序列号,可以避免javabean修改,造成序列号改变运行时候出错

  • 数据读取末尾的输出标记:

    • 字符,字节读取到文件结尾会返回-1

    • 读取一整行到文件末尾会返回null

    • 读取对象到末尾会报EOFException

  • File[]listFiles()注意点:

    • File指向不存在的,返回null

    • 存在的是文件:返回null

    • 存在的是文件夹正常输出,如果是空文件夹,返回长度为0的File数组

    • 权限问题没有访问权限,返回null

    注意:返回为null的情况,可以有效避免遍历返回数组时候出现运行时异常  


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK