美文网首页
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 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • Java 最近遇到的面试题

    JAVA 基础 java 对象拷贝深浅拷贝 对象何时进入老年代 Minor GC 和 Full GC 有什么不同 ...

  • Java深拷贝和浅拷贝

    Java深拷贝和浅拷贝 对象拷贝有哪些 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同...

  • java 深拷贝和浅拷贝

    浅拷贝: 不额外创建子对象,只是把子对象的引用拷贝过去深拷贝: 创建新的子对象并拷贝属性 如果把java bean...

  • Python深拷贝和浅拷贝解析

    概述 本文涉及到主要的概念有: 变量(名) 引用 对象可变对象和不可变对象 拷贝深拷贝和拷贝 正文 像Java,P...

  • Java拷贝对象

    最近有一个需求,要先把文件从U盘拷贝到sd卡。而这个文件的路径则和一个生成的数据有关系,也就是说之前我保存的路径是...

  • Java对象拷贝

    常用的对象拷贝有2种方式,分别是浅拷贝,深拷贝。 1. 浅拷贝 在浅拷贝中,如果原型对象的成员变量是值类型,将复制...

  • Java对象拷贝

    实现方法

  • Java之深浅拷贝

    Java之深浅拷贝 基本类型:拷贝数据的值其他类型:拷贝地址的引用,拷贝出的新对象与原对象共享实例变量,不受访问权...

  • Java的浅拷贝与深拷贝

    Java的浅拷贝与深拷贝 一、概念 浅拷贝浅拷贝仅仅复制所考虑的对象(包括对象中的基本变量),而不复制它所引用的对...

网友评论

      本文标题:Java拷贝对象

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