2019独角兽企业重金招聘Python工程师标准>>>

java 复制对象有哪些方式

Apache的 Common beanutils库

org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin);

Springframework 的BeanUtil

依赖:

 <dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency>
BeanUtils.copyProperties(source, target);

Object 流

使用 ObjectInputStream

 /*** This method makes a "deep clone" of any Java object it is given.*/public static Object deepClone(Object object) {try {ByteArrayOutputStream baos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(baos);oos.writeObject(object);ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {e.printStackTrace();return null;}}

or

 /*** Returns a copy of the object, or null if the object cannot be serialized.<br>* refre:http://javatechniques.com/blog/faster-deep-copies-of-java-objects/*/public static Object copy(Object orig) {Object obj = null;try {// Write the object out to a byte arrayFastByteArrayOutputStream fbos = new FastByteArrayOutputStream();ObjectOutputStream out = new ObjectOutputStream(fbos);out.writeObject(orig);out.flush();out.close();// Retrieve an input stream from the byte array and read// a copy of the object back in.ObjectInputStream in = new ObjectInputStream(fbos.getInputStream());obj = in.readObject();in.close();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException cnfe) {cnfe.printStackTrace();}return obj;}

json序列化

先序列化对象 为json;
然后对该json字符串 反序列化为新的对象.

/**** 2018/7/18*/@Testpublic final void test_CopyObject() {Student student = new Student();student.setName("liuyu");System.out.println("复制前 :" +student.hashCode());String json = HWJacksonUtils.getJsonP(student);Student student2 = (Student)HWJacksonUtils.deSerialize(json, Student.class);System.out.println("student2 :" + student2.getName());System.out.println("复制后 :" +student2.hashCode());}

使用开源库 DozerBeanMapperBuilder

依赖:

  <dependency><groupId>com.github.dozermapper</groupId><artifactId>dozer-core</artifactId><version>6.2.0</version></dependency>

测试代码:

 @Testpublic final void test_Dozer() {Student student = new Student();student.setName("liuyu2");Mapper instance = DozerBeanMapperBuilder.buildDefault();Student student2 = instance.map(student, Student.class);System.out.println("student2 :" + student2.getName());}

FastByteArrayOutputStream 源码

package com.io.hw.file.util;import java.io.InputStream;
import java.io.OutputStream;/**** refre:http://javatechniques.com/blog/faster-deep-copies-of-java-objects/<br>* ByteArrayOutputStream implementation that doesn't synchronize methods* and doesn't copy the data on toByteArray().** @author huangwei* @since 2015年3月5日*/
public class FastByteArrayOutputStream extends OutputStream {/*** Buffer and size*/protected byte[] buf = null;protected int size = 0;/*** Constructs a stream with buffer capacity size 5K*/public FastByteArrayOutputStream() {this(5 * 1024);}/*** Constructs a stream with the given initial size*/public FastByteArrayOutputStream(int initSize) {this.size = 0;this.buf = new byte[initSize];}/*** Ensures that we have a large enough buffer for the given size.*/private void verifyBufferSize(int sz) {if (sz > buf.length) {byte[] old = buf;buf = new byte[Math.max(sz, 2 * buf.length)];System.arraycopy(old, 0, buf, 0, old.length);old = null;}}public int getSize() {return size;}/*** Returns the byte array containing the written data. Note that this* array will almost always be larger than the amount of data actually* written.*/public byte[] getByteArray() {return buf;}public final void write(byte b[]) {verifyBufferSize(size + b.length);System.arraycopy(b, 0, buf, size, b.length);size += b.length;}public final void write(byte b[], int off, int len) {verifyBufferSize(size + len);System.arraycopy(b, off, buf, size, len);size += len;}public final void write(int b) {verifyBufferSize(size + 1);buf[size] = (byte) b;size++;}public void reset() {size = 0;}/*** Returns a ByteArrayInputStream for reading back the written data*/public InputStream getInputStream() {return new FastByteArrayInputStream(buf, size);}
}

参考:
https://github.com/DozerMapper/dozer

转载于:https://my.oschina.net/huangweiindex/blog/1858700

java 复制对象有哪些方式相关推荐

  1. java复制对象_JAVA对象复制的方法

    1.概述 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与 ...

  2. java 复制对象_Java核心知识 基础七 JAVA 复制

    将一个对象的引用复制给另外一个对象,一共有三种方式.第一种方式是直接赋值,第二种方式 是浅拷贝,第三种是深拷贝.所以大家知道了哈,这三种概念实际上都是为了拷贝对象. 1. 直接赋值复制 直接赋值.在 ...

  3. java 对象深度复制_Java深度复制– Java复制对象

    java 对象深度复制 Today we will look into Java deep copy. Sometimes we want to get a copy of an Object, bu ...

  4. [转载] Java复制对象与集合工具类

    参考链接: Java中的类和对象 项目中经常需要将某个对象的属性值复制给另一个对象,或者将一个集合复制到另一个集合.利用spring提供的BeanUtils,自己简单封装了一个工具类. public ...

  5. JAVA复制对象给另一个对象

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 今天算是 ...

  6. Java实现对象的克隆方式

    Java实现对象克隆的方法 1.Java实现克隆有两种形式 浅拷贝 深拷贝 在Java中吗,我们说两个对象是否相等通常有两层含义: 对象的内容是否相等,通常使用到对象的 equals(Object o ...

  7. java 复制对象_Java程序员必备:序列化全方位解析

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

  8. 在 JavaScript 中复制对象

    ​​​​​​ 1.JavaScript中的浅拷贝对象 2.深度复制JavaScript中的对象 各种编程语言具有各种数据结构,允许你在内存中组织和存储数据.每个数据结构的工作方式都是独一无二的.例如, ...

  9. java script 对象

    java script 对象 1.创建方式 1)通过字面量的形式创建 例:var = stt{x:1,y:2,y:3}; 或:var = stt{ x:1, y:2, 'for':3 } 注意关键字必 ...

最新文章

  1. IDC:2018年中国制造业十大预测
  2. 关于Python3.9,看这张16岁高中生做的「新特性必知图」就够了
  3. 第二阶段_第五小节_C#基础3
  4. BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
  5. java面试基础_java面试之基础(总结)
  6. javascript获取css样式文件中定义的样式的方法
  7. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
  8. java webservice 开发总结
  9. 关于男生追女生的数学模型【转王博】
  10. 退出CrOS Factory,进入正常Chrome OS
  11. Java IO和NIO的区别
  12. 写好一份属于自己的简历
  13. STM32F103调试出现 while((RCC-CR RCC_CR_PLL2RDY) == 0) 死循环。
  14. 【系统之家首发】Ghost_Windows7_sp1_Ultimate_x86V2011.10.10 【OEM 通用版】Windows7旗舰版好人一个出品
  15. 【技术贴】【技术贴】每次双击都会跳出来打开方式的解决办法。。。选择你想用来打开此文件的程序。。...
  16. b2c o2o_企业对消费者– B2C | 第三部分
  17. uni-app实现搜索功能
  18. 1985-2021年全国31省一二三产业就业人数/各省分产业就业人数数据(无缺失)
  19. 【踩坑】 a value of type “int“ cannot be assigned to an entity of type “TaskHandle_t“
  20. 软件测试_day02

热门文章

  1. Codeforces Round #270
  2. Fragment 和 FragmentActivity的使用
  3. Linux内核设计第五周学习总结 分析system_call中断处理过程
  4. redis-3.0.2集群部署
  5. iOS UITextField清空按钮
  6. Swift3.0和OC桥接方法
  7. ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
  8. MySQL · myrocks · MyRocks之memtable切换与刷盘
  9. Linux下修改MAC地址总结
  10. javascript的词法作用域