美文网首页
java序列化与反序列化

java序列化与反序列化

作者: 七匹狼_cd8f | 来源:发表于2019-05-22 11:01 被阅读0次

1.概念:序列化的意义是把一个实例对象进行即时冻结,保存即时数据;反序列化即是对冻结的数据进行解冻还原;或者可以说是数据格式的转化与复原。

2.需注意的几个问题:

       1):所有要序列化的对象必须实现Serializable,并且对

                private static final long serialVersionUID = -2185617442774674835L;

                虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致

       2):transient和static修饰的字段默认都不会序列化,还有父类字段但父类没有实现Serializable的也不会序列化

3.对某些字段如果在传输过程中需要处理,则可重写writeObject和readObject

      ATTENTION:writeObject and readObject must decorated by private

/**

* Created by dyf on 2019/5/22 9:35

* ATTENTION:writeObject and readObject must decorated by private

* 重写时,不处理的字段如果要序列化和反序列化也要put或read

* transient和static修饰的都不会序列化,或者父类字段但父类没有实现Serializable的也不会序列化

*/

public class Userimplements Serializable{

private static final long serialVersionUID = -6375006318163451630L;

    private StringuserName;

    private StringpassWord;

    public User() {

}

public StringgetUserName() {

return userName;

    }

public void setUserName(String userName) {

this.userName = userName;

    }

public StringgetPassWord() {

return passWord;

    }

public void setPassWord(String passWord) {

this.passWord = passWord;

    }

private void writeObject(ObjectOutputStream out){

try {

ObjectOutputStream.PutField putField = out.putFields();

            System.out.println("原密码:"+passWord);

            passWord="encryption";

            putField.put("passWord",passWord);

            putField.put("userName",userName);

            System.out.println("加密后的密码:"+passWord);

            out.writeFields();

        }catch (IOException e) {

e.printStackTrace();

        }

}

private void readObject(ObjectInputStream in)throws IOException, ClassNotFoundException {

ObjectInputStream.GetField getField = in.readFields();

        Object password = getField.get("passWord", "");

        Object username = getField.get("userName", "");

        System.out.println("要解密的字符串:"+password.toString());

        passWord="pass";

        userName=username.toString();

    }

@Override

    public StringtoString() {

return "User{" +

"userName='" +userName +'\'' +

", passWord='" +passWord +'\'' +

'}';

    }

}

public class FieldsProcess {

public static void main(String[] args)throws IOException, ClassNotFoundException {

write();

      read();

    }

public static void write()throws IOException {

User user =new User();

        user.setUserName("lining");

        user.setPassWord("pass");

        ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("d://test/4.obj"));

        objectOutputStream.writeObject(user);

    }

public static void read()throws IOException, ClassNotFoundException {

ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream("d://test/4.obj"));

        User user = (User) objectInputStream.readObject();

        System.out.println(user.toString());

    }

}

运行结果:

原密码:pass

加密后的密码:encryption

要解密的字符串:encryption

User{userName='lining', passWord='pass'}

4.多个对象写入和读取:

      每次写入(同一个out对象write)都会清除上一次的文件内容,重新写入;一次可以写入多个对象,如果是不同类型的实例,读取时也要按顺序读取,否则报强转错误;如果读取的次数超过写入的次数,则报EOFEXCEPTION;注意:不同对象要按顺序,读写次数一致

相关文章

  • Java序列化与反序列化

    问题 Java序列化与反序列化是什么?为什么需要序列化与反序列化?有什么好处?如何实现Java序列化与反序列化? ...

  • 《成神之路-基础篇》Java基础知识——序列化(已完结)

    Java对象的序列化与反序列化 介绍了序列化与反序列化的基本用法 深入分析Java的序列化与反序列化 介绍了wri...

  • java专题之序列化

    一、基本概念 1、什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反...

  • urldns利用链分析

    java序列化与反序列化 java 序列化与反序列化 为了更好的存放传输一些数据,往往会将一些数据进行序列化,需 ...

  • Java序列化与Hessian序列化的区别

    Java序列化与Hessian序列化的区别

  • 2022-07-12

    什么是序列化与反序列化 Java 序列化是指把 Java 对象转换为字节序列的过程。 Java 反序列化是指把字节...

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • 序列化与反序列化1

    一、什么是序列化与反系列化? 序列化是将对象转换为二进制形式的数据(如Java中的byte数组),反序列化是再将二...

  • Serializable中为什么要设置UID

    1、什么是Java序列化与反序列化 Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指...

  • Protobuf的序列化与反序列化

    Protobuf的序列化与反序列化 proto.proto文件内容 Java 实现 序列化 反序列化 GO 实现 ...

网友评论

      本文标题:java序列化与反序列化

      本文链接:https://www.haomeiwen.com/subject/zwryzqtx.html