java实现序列化,java中静态变量存在哪里
在Java中,序列化是一个概念,它将对象的状态写入字节流,以便可以使用JPA和RMI等技术通过网络传输。
序列化对象-确保类实现了序列化接口。
创建文件输出流对象。 此对象表示保存对象的文件的文件(抽象路径)。
通过传递上面创建的FileOutputStream对象创建ObjectOutputStream对象。
使用writeObject ()方法将对象写入文件。
取消序列化的对象创建一个FileInputStream对象,该对象表示包含序列化对象的文件。
使用readObject ()方法从文件中读取对象。
使用获取的对象。
反序列化对象中的变量
如果只对一个对象进行反序列化,则实例变量将被保存,并且在进程后具有相同的值。
瞬态变量-不考虑瞬态变量的值。 从序列化中排除。 例如,如果声明瞬态变量,则非序列化后的值始终为null、false或0 (缺省值)。
静态变量-反序列化期间不保留静态变量的值。 实际上,静态变量也不会序列化,因为它属于类。 如果取消序列化,则从类中获取当前值。
样品
在此过程中,在反序列化之前修改了实例的值、类的静态变量和瞬态变量。
在此步骤之后,实例变量的值将相同。 临时变量显示默认值,静态变量显示类中的新[当前]值。 importjava.io.FileInputStream;
importjava.io.FileOutputStream;
import Java.io.object inputstream;
import Java.io.object output stream;
importjava.io.Serializable;
classtudentimplementsserializable {
隐私名称;
隐私保护区;
隐私保护措施层=2018;
公共事件
system.out.println (thisisaconstructor );
this.name='Krishna ';
this.age=25;
}
公共稳定(字符串名称,intage )。
this.name=name;
this.age=age;
}
公共语音显示(
system.out.println (' name : ' this.name );
system.out.println(age: ) this.age );
system.out.println(year: ) student.year );
}
公共语音集名称(字符串名称) {
this.name=name;
}
公共语音设置(intage ) {
this.age=age;
}
publicvoidsetyear (内年) {
Student.year=year;
}
}
publicclassSerializeExample{
publicstaticvoidmain (字符串args [ ] ) throwsException{
创建Student对象
sudentsTD=newstudent('vani ',27 );
//序列化对象
fileoutputstreamfos=new file output stream (e : (student.ser );
objectoutputstreamoos=新对象输出流;
操作系统.写入对象(STD;
oos.close (;
fos.close (;
//在反序列化之前打印数据
System.out.println ('反序列化前的值:');
std.display (;
//更改静态变量值
STD.setyear(2019;
//更改实例变量的值
STD.setname(varada );
//改变过渡变量值
STD.setage(19;
system.out.println (对象序列化……);
//反序列化对象
fileinputstreamfis=new file inputstream (e : (student.ser );
对象输入流=新对象输入流(fis;
sudentdeserializedstd=(student ) ois.readObject );
system.out.println (对象de-serialized……);
ois.close (;
fis.close (;
System.out.println ('反序列化后的值:');
描述性STD.display (;
}
}
输出结果反序列化前的值:
Name:Vani
Age:27
Year:2018
对象序列化……。
对象de-serialized……。
解除序列化后的值:
Name:Vani
Age:0
Year:2019