Java序列化和反序列化

Java序列化和反序列化

1、什么是序列化和反序列化

序列化:把对象转换为字节序列的过程。

反序列化:把字节序列恢复成对象的过程。

2、被序列化的类需要实现serializable接口,只是为了标注该对象是可以被序列化的,并没有需要实现的方法。

3、示例:

新建Student类

import java.io.Serializable;
public class Student implements Serializable{

    private String name;
    private int age;

    private static final long serialVersionUID = 1L;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

新建转换工具类SerializeUtils:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializeUtils {
    public byte[] Serialize(Object object) {
        ByteArrayOutputStream byteArrayOutPutStream = new ByteArrayOutputStream();
        try {
            ObjectOutputStream objectOutPutStream = new ObjectOutputStream(byteArrayOutPutStream);
            //将对象写入到字节数组中进行序列化
            objectOutPutStream.writeObject(object);
            return byteArrayOutPutStream.toByteArray();
        }catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public Object deSerialize (byte[] bytes) {
        //将二进制数组导入字节数据流中
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        try {
            //将字节数组留转化为对象
            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
            return objectInputStream.readObject();
        }catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

新建测试类test_serializable:

public class test_serializable {
    public static void main(String[] args) {
        SerializeUtils serializeUtils = new SerializeUtils();
        Student student = new Student();
        student.setName("kobe");
        student.setAge(20);
        byte[] serializObject = serializeUtils .Serialize(student);
        System.out.println(serializObject);

        Student e = (Student)serializeUtils.deSerialize(serializObject);
        System.out.println("Name: " + e.getName()+",Age: " + e.getAge());
    }
}

 

 

 

转载于:https://my.oschina.net/xiaozhiwen/blog/1834751

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101594.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 高德地图自定义样式「建议收藏」

    高德地图自定义样式「建议收藏」高德地图里带有几个可选的样式(https://lbs.amap.com/api/javascript-api/guide/map/map-style/),如下图:唯一一个比较贴合我们公司页面色系的就

    2022年8月6日
    23
  • thinkphp多用户在线客服系统源码-thinkPHP内核 附使用教程

    thinkphp多用户在线客服系统源码-thinkPHP内核 附使用教程步骤1请使用宝塔面板安装上传源码并且解压到网站很目录设置运行目录为public测试环境为php5.6mysql5.5伪静态选择为thinkphp宝塔安全放通:2080,9090这两个端口步骤2上方操作完毕后创建个数据库进行安装网站安装http://你的域名.com/install.php步骤3启动命令制定目录cd/www/wwwroot/你的网站目录/cgwl_pusher启动指令phpstart.phpstart-d如果没有运作起来根目录有个php5.6.

    2022年7月19日
    27
  • Mysql 日期格式转换

    Mysql 日期格式转换DATE_FORMAT(date,format)根据格式串format格式化日期或日期和时间值date,返回结果串。 可用DATE_FORMAT()来格式化DATE或DATETIME值,以便得到所希望的格式。根据format字符串格式化date值:

    2022年6月15日
    53
  • setscale方法的用法_BigDecimal的setScale()方法无效

    setscale方法的用法_BigDecimal的setScale()方法无效最近在使用BigDecimal进行四舍五入时,发现setScale()方法设置的精度值并没有起作用,一度让我怀疑起是否jdk有bug,代码如下:错误代码doubled=7.199999999999999;BigDecimaldecimal=newBigDecimal(String.valueOf(d));decimal.setScale(2,BigDecimal.ROUND_HAL…

    2022年10月20日
    2
  • 逆向 Framework.jar

    逆向 Framework.jar

    2021年12月15日
    45
  • poe交换机可以当网络交换机吗_家用需要网管交换机吗

    poe交换机可以当网络交换机吗_家用需要网管交换机吗PoE交换机是一种新型的多功能交换机,随着PoE交换机的广泛应用,人们对PoE交换机有了一定的了解。然而,很多人认为PoE交换机可以自行发电,这种说法并不正确,通常所讲的PoE交换机供电指的是PoE交换机通过网线来给其他设备供电,与此同时也不丢失传输数据的功能。那么,PoE交换机可以当普通交换机用吗?下面就由飞畅科技的小编为大家来详细介绍下这个问题,一起来看看吧!PoE交换机是具有PoE功能的交换机,与普通的交换机之间可以进行连接。它可以在供电的同时传输数据,而普通交换机的主要作用是交换数据,并不具备供

    2022年10月5日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号