美文网首页
序列化及反序列化接口类

序列化及反序列化接口类

作者: gzf_701 | 来源:发表于2018-01-14 00:02 被阅读0次

    最近在写通信项目的时候遇到了个最主要的问题,用java写客户端的时候,与服务端进行通信的时候不能直接传json或者是对象,只能用byte数组,这时候就需要将对象转换为byte数组

    必须注意的一点啊:bytes在反序列化为Object的前提是byte[]是通过ObjectOutputStream序列化的,也就是说序列化和反序列化是有格式的,并不是一个随便的byte数组就能被反序列化的

    1.什么是序列化呢呵反序列化呢?

    序列化:指把堆内存中的java对象数据,通过某种方式传递给 某个网络节点,(在网络上传输),这个过程就叫做序列化。通俗即为将数据结构或对象转换为二进制串的过程

    反序列化:把磁盘文件中的对象数据或者网络节点上的对象数据(即二进制数据),转换为java对象模型的过程

    2.java怎么进行序列化呢?

    a.需要做序列化的类,必须实现序列化接口,java.lang.Serializable接口这是一个标志接口,没有任何抽象方法),Java 中大多数类都实现了该接口,比如:String,Integer

    b.底层会判断,如果当前对象是Serializable的实例,才允许被序列化

    c.java中使用对象流来实现序列化和反序列化

    ObjectOutputStream:通过 writeObject()方法做序列化操作                                                                                         ObjectInputStream:通过 readObject() 方法做反序列化操作

    3.java中序列化和反序列化的接口类:

    public class ObjectAndByte {

    /**

    * 对象转数组

        * @param obj

        * @return

        */

        public byte[]toByteArray (Object obj) {

    byte[] bytes =null;

            ByteArrayOutputStream bos =new ByteArrayOutputStream();

            try {

    ObjectOutputStream oos =new ObjectOutputStream(bos);

                oos.writeObject(obj);

                oos.flush();

                bytes = bos.toByteArray ();

                oos.close();

                bos.close();

            }catch (IOException ex) {

    ex.printStackTrace();

            }

    return bytes;

        }

    /**

    * 数组转对象

        * @param bytes

        * @return

        */

        public ObjecttoObject (byte[] bytes) {

    Object obj =null;

            try {

    ByteArrayInputStream bis =new ByteArrayInputStream (bytes);

                ObjectInputStream ois =new ObjectInputStream (bis);

                obj = ois.readObject();

                ois.close();

                bis.close();

            }catch (IOException ex) {

    ex.printStackTrace();

            }catch (ClassNotFoundException ex) {

    ex.printStackTrace();

            }

    return obj;

        }

    }

    相关文章

      网友评论

          本文标题:序列化及反序列化接口类

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