美文网首页
Java拷贝对象

Java拷贝对象

作者: xiasuhuei321 | 来源:发表于2017-07-27 21:47 被阅读0次

    最近有一个需求,要先把文件从U盘拷贝到sd卡。而这个文件的路径则和一个生成的数据有关系,也就是说之前我保存的路径是U盘的路径,最后生成的时候则需要实际在sd卡的路径。这很简单,把路径改了不就成了?

    没那么简单,万一sd卡内存不够呢?不够你复制,这个时候你前面已经复制了,路径也改了,数据已经被“污染”了,只能从头再配置一遍。这显然是不合理的做法,所以需要我们拷贝一份原有的数据。但是在Java中默认是引用拷贝,并不是在堆里面给你另外分配一块内存,给你一个新的对象,而是拷贝一个引用给你。这并没有什么卵用,操作的是堆内的同一个对象,依旧逃不过数据被污染的命。所以需要我们自己实现深度拷贝。

    我首先能想到的方案有两个:

    • 遍历这个类的所有属性,将每一个属性都拷贝一份
    • 先将对象序列化写入文件,再从文件中读取对象

    第一种方式在类比较简单的时候还是比较实用的,我们为每一个属性申请内存并将值设置好。但是如果这个类内部的属性很复杂或者有比较复杂的父类,这个时候处理起来就麻烦很多了。第二种方式简单是简单,本来也打算就用这种方式来做。后来同事提醒我还有第三种方式:利用Json框架。

    是的利用Json框架比如Gson或者FastJson之类的,可以很简单的将一个实体类转化为字符串,然后我们再将这个字符串转换成一个实体对象,代码如下:

    Gson g = new Gson();
    // 假设此处t是一个指向堆内对象的引用
    String s = g.toJson(t);
    T newT = g.fromJson(s, T.class);
    

    相关文章

      网友评论

          本文标题:Java拷贝对象

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