目录
一、转换流
1、转换流概述:转换流就是在字节和字符之间起桥接作用的流
2、提供的转换流:
- InputStreamReader:将一个字节的输入流转换为一个字符的输入流;
- OutputStreamWriter:将一个字符的输出流转换为一个字节的输出流;
例子:
public void readerFileToUTF8(){
try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("转换流.txt"),"UTF-8")){
char [] data = new char[128];
int length = inputStreamReader.read(data);
String content = new String(data,0,length);
System.out.println("编码为UTF-8内容:");
System.out.println(content);
} catch(IOException e) {
e.printStackTrace();
}
}
二、对象操作流
1、对象操作流的特点
可以把对象以字节的形式写到本地文件,直接打开文件,是读不懂的,需要再次用对象操作流读到内存中。
2、对象操作流
- 对象操作输入流:ObjectInputStream ;
- 对象操作输出流:ObjectOutputStream;
- 对象序列化:就是将对象写到本地文件中,或者在网络中传输对象;
- 对象反序列化:把写到本地文件中的对象读到内存中,或者接收网络中传输的对象
反序列化例子:
public void SerFile2Object() {
try(ObjectInputStream inputStream =
new ObjectInputStream(new FileInputStream("D:\\idea Project\\Study-2\\day01-base\\person.ser"))){
Person person = (Person) inputStream.readObject();
System.out.println(person);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
3、对象操作流出现的问题:
- 修改了Javabean类后会出现问题:会抛出InvalidClassException异常;
- 解决方法:给对象所属的类加一个serialVersionUID:private static final long serialVersionUID = 42L;
- 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程;
三、Properties
1、Properties概述:
- 是一个Map体系的集合类
- properties中有跟IO相关的方法
- 只存字符串
2、 Properties和IO流结合方法:
方法名 | 说明 |
void load(InputStream inStream) | 从输入字节流读取属性列表(键和元素对) |
void load(Reader reader) | 从输入字符流读取属性列表(键和元素对) |
void store(OutputStream out, String comments) | 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法的格式写入输出字节流 |
void store(Writer writer, String comments) | 将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式写入输出字符流 |
例子:读取本机的配置文件
public void findSystemProperties(){
//获取系统配置信息
Properties properties = System.getProperties();
// properties.list(System.out);
try {
properties.store(new FileWriter("new.properties"),null);
} catch (IOException e) {
e.printStackTrace();
}
}