11.I/O
transient可以阻止序列化,只能修饰变量,不能修饰类和方法。修饰的变量在反序列化后会变成默认值,比如int类型会变0。static不会被序列化,不属于对象。序列化成为二进制对象须加Serializable关键字
例:
public class TransientModel implements Serializable {
private static final long serialVersionUID = -4575083234166325540L;
private String a;
private transient String b;
public TransientModel (String a,String b){
this.a= a;
this.b= b;
}
@Override
public String toString(){
return String.format("TransientModel.toString(): a=%s,b=%s", a,b);
}
}
public static void main(String[] args){
String a="a", b="b";
TransientModel model = new TransientModel(a, b);
System.out.println("序列化前:"+model.toString());
ObjectOutputStream outStream;
ObjectInputStream inStream;
//文件保存在本地,把这个路径换成自己的文件路径
String filePath = "D:/test/test.log";
try {
outStream = new ObjectOutputStream(new FileOutputStream(filePath));
outStream.writeObject(model);
inStream = new ObjectInputStream(new FileInputStream(filePath));
TransientModel readObject = (TransientModel)inStream.readObject();
System.out.println("序列化后:"+readObject.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
I/O流的划分
按照流向,分为输入输出
按照 *** 作单元,分为字节流和字符流
按照角色分为节点和处理
4个抽象基类:字符的输入输出:Input/OutputStreamRead. 字节的输入输出:Input/OutputStream
具体io流细分参考javaguide图
字符流方便字符传输,避免字节流转换字符时出现编码导致的乱码问题。
节点流:可以在指定位置读写的,如FileReader
处理流:对已存在的流封装,通过封装功能实现读写,如BufferReader
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)