本帖最后由 小石姐姐 于 2018-4-24 17:09 编辑
就业班_JavaSE_day10_IO流
一 IO流
1 分类
按方向分 : 输入流 输出流 这里的输入和输出是相对于程序来说。
按类型分 字节流 字符流
按功能分 节点流 包装流
2 体系结构 顶层都是抽象类
InputStream、OutputStream、Reader、Writer
文件流
FileReader 、FileWriter 、 FileOutputStream、FileInputStream
缓冲流
BufferedReader 、 BufferedWriter 、BufferedInputStream 、BufferedOutputStream
标准输入输出
System.out System.in
转换流
InputStreamReader OutputStreamWriter
对象流
ObjectOutputStream ObjectInputStream
1 对象需要实现序列化接口 读到末尾报EOFException。所以用集合封装多个对象来作为一个对象,
一次读取一个集合对象,避免EOFException。
2 序列号:实现序列化接口,默认会给该类自动提供一个序列号,每次读写都需要先判断
二边的序列号是否一致,如果不一致,就会报异常。但通常我们会经常修改类,这样就会导致
序列号改变,造成不一致。所以我们人为添加一个序列号id,将序列号ID固定。避免序列号改变报异常。
3 写对象, 读写对象,需要统一都用对象流。
打印流
PrintWriter
可以实现自动换行;自动刷新。
println() 可以自动换行。
如果要实现自动刷新,调构造方法来实现。
println、printf 或 format 只有调这三个方法才会触发自动刷新
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)
3 编码流程
1.得到输入和输出流
2.进行读写操作
(读写单位:一次读写一个字节;一次读写一个字符;
一次读写一个字节数组;一次读写一个字符数组;
一次读写一个字符串;一次读写一个对象;
)
3.释放资源
注意:所有IO流的构造方法传入对象都是以类名结尾的流。
除了转换流(传入对象的字节流)和打印流(可以直接传入File 、字节流、字符流)
二 Properties类 继承Hashtable 是一个map
构造方法 Properties prop = new Properties();
特有添加元素方法 prop.setProperty(String key, String value)
特有取元素方法 prop.getProperty(String key)
与IO结合的方法
从.properties文件读数据
prop.load() 传字节输入流和字符输入流都可以
从Properties对象写入数据到.properties文件
prop.store() 传字节输出流和字符输出流都可以
注意 .properties文件不能存储中文,应为.properties文件默认是ISO8859-1编码
三 字符集编码
java中字符默认采用ANSI 该变量表示本地语言环境。如操作系统是简体中文,则ANSI是GBK
UTF-8 GBK
避免乱码,读写用同一种字符集。
String(byte[] bytes, String charsetName)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
String(byte[] bytes, int offset, int length, Charset charset)
通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。
public byte[] getBytes(Charset charset)
使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
public byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
转换流中构造方法带字符集编码来实现解码和编码。
public InputStreamReader(InputStream in, String charsetName)
public OutputStreamWriter(OutputStream out, String charsetName)
|
|