马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 可爱的静静 于 2017-9-1 01:43 编辑
对象序列化 对象序列化作用:把对象存到文件里,想用的时候可以读取 ObjectOutputStream和ObiectInputStream是直接操作对象(对象当中会封装一些数据)的输入流和输出流,对象的持久化,可以长久存放数据的文件 ObjectOutputStream和ObiectInputStream是在io包里面的
对象序列话和反序列话例子: - <div> import java.io.*;</div><div> public class xulie {</div><div> public static void main(String[] args) {
- xulie a=new xulie();
- a.WritePut();
- a.read();</div><div> }
-
- public void WritePut(){
- try {
- FileOutputStream out =new FileOutputStream("D://Student.dat");
- ObjectOutputStream oos=new ObjectOutputStream(out);
- Contact contact=new Contact("小明","123456789","1609368211@qq.com");
- oos.writeObject(contact);
- oos.close();
-
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void read(){
- try {
- FileInputStream in=new FileInputStream("D://Student.dat");
- ObjectInputStream ois = null;
- ois = new ObjectInputStream(in);
- Contact contact = null;
- contact = (Contact)ois.readObject();
- System.out.println(contact);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
-
- }
- }
- }
- </div></div>
复制代码
- import java.io.Serializable;
- public class Contact implements Serializable{
- private String name;
- private String phone;
- private String email;
- public Contact ( String name,String phone,String email){
- this.name=name;
- this.phone=phone;
- this.email=email;
- }
- public String toString()
- {
- return "姓名"+name+",电话:"+phone+",email:"+email;
- }
- }
复制代码 输出结果是:
姓名小明,电话:123456789,email:1609368211@qq.com
想要被序列化的例子必须是要有资格,只有类实现接口Serializable接口才会有资格,这个接口没有方法,只是标记这个对象可以序例化
如果每一次改变了类里面的内容,之前对象序列化的文件就没什么用,如果你重新建一个类,这就很麻烦了
怎样给这个标记可以序例化 其实就是给个类加了一个ID号,例如:static final long serialVersionUID = 42L;
 假设已经把某类序例化了,如果某类改变了, id号就改变了,再次读取这个文件的时候就读取不了了,如果我们自己给这个类id号的话,修改了类之后id号不会改,修改之前保存的对象文件也就是可以读取了 例如:刚刚已经对象序列话了,再来假设把成员name 访问方式改为public的话 再读取这个文件的时候运行会有错误 可以这样纸办:代码如下 - [b]
- import java.io.Serializable;
- public class Contact implements Serializable{
- static final long serialVersionUID = 42L;
- private String name;
- private String phone;
- private String email;
- public Contact ( String name,String phone,String email){
- this.name=name;
- this.phone=phone;
- this.email=email;
- }
- public String toString()
- {
- return "姓名"+name+",电话:"+phone+",email:"+email;
- }
- }[/b]
复制代码
代码改完后,先对喜爱那个序列化,再改类的内容,在读取文件,运行结果如下: 姓名小明,电话:123456789,email:1609368211@qq.com
其实就是加了个ID号 无论类的代码怎么改变也好,都可以读回之前的对象序列化文件
静态的成员,即使new了一个对象赋值了,序列化也不会有改变,如果不想对非静态的成员序列化的话,可以在成员变量前面加关键字transient 例如:
代码还是上面那样,transient int phone 运行结果当然那就是没有phone的值没有改变
|