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

序列化及反序列化接口类

作者: 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;

    }

}

相关文章

  • 枚举

    如果父类实现了 serializable 接口,子类不用再实现序列化接口,子类及父类成员变量即可序列化 如果父类没...

  • 序列化

    JavaDoc文档描述 类可以通过继承序列化接口拥有序列化的能力.所有可序列化类的子类都是可序列化的.序列化接口没...

  • 2.3 IPC基础概念介绍(一)

    1. Serializable接口 定义User类,实现Serializable接口 序列化和反序列化 打印结果:...

  • 对象的序列化与反序列化

    官方文档理解 要使类的成员变量可以序列化和反序列化,必须实现Serializable接口。任何可序列化类的子类都是...

  • java序列化之Hessian

    一、Hessian序列化的前提 Hessian要实现序列化,前提是被序列化的类得实现Serializable接口。...

  • Java入门--序列化与反序列化

    Java入门--序列化与反序列化 需要实例化的类 需要实现 Serializable 接口 (空接口, 不定义必须...

  • java实现序列化及反序列化

    -例 创建Student类 2.创建SerializeTest类,实现对Student类的序列化及反序列化

  • Java之序列化

    如何声明一个可序列化的类? 一个类可序列化的前提:实现Serializable接口 一个属性不想序列化的方式:增加...

  • 序列化、反序列化代码示例

    1、序列化、反序列化接口 2、实现自己定义的接口 3、实体类 注意; 1、Serializable必须得实现jav...

  • 单例模式安全问题--序列化破坏单例模式

    通过序列化和反序列化拿到了不同的对象。先实现序列化接口: 测试类 运行结果: 解决方法:添加readResolve...

网友评论

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

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