在copy 对像时,发现改变copy对象的属性值时,都会改变原值,方法如下:

List a ;//a为方法参数中传进来的list;

方法1:

List b = new ArrayList(a);

方法2:

List b = new ArrayList(Arrays.asList(new A[a.size()]));

Collections.copy(b, a);

以上方法copy完毕后,经测试都会改变原list的对象属性值,放弃;

使用以下方法解决了此问题

/**

* list中的对象必须实现序列化接口 执行序列化和反序列化  进行深度拷贝

* @param srcList

* @return

* @throws IOException

* @throws ClassNotFoundException

*/

@SuppressWarnings("unchecked")

private List deepCopy(List srcList) throws IOException, ClassNotFoundException {

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(byteOut);

out.writeObject(srcList);

ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());

ObjectInputStream in = new ObjectInputStream(byteIn);

List destList = (List) in.readObject();

return destList;

}

根据的2015年11月发现的序列化漏洞修改为:

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.configuration.ConfigurationException;

import org.apache.struts2.ServletActionContext;

import org.nibblesec.tools.SerialKiller;

/**

* list中的对象必须实现序列化接口 执行序列化和反序列化  进行深度拷贝

* @param srcList

* @return

* @throws IOException

* @throws ClassNotFoundException

* @throws ConfigurationException

*/

@SuppressWarnings("unchecked")

private List deepCopy(List srcList) {

List destList = null;

ByteArrayOutputStream byteOut = null;

ObjectOutputStream out = null;

ByteArrayInputStream byteIn  = null;

ObjectInputStream ois = null;

try {

byteOut = new ByteArrayOutputStream();

out = new ObjectOutputStream(byteOut);

out.writeObject(srcList);

byteIn = new ByteArrayInputStream(byteOut.toByteArray());

ois = new SerialKiller(byteIn, "config/serialkiller.conf");

//原方法放弃

// ObjectInputStream in = new ObjectInputStream(byteIn);

// destList = (List) in.readObject();

destList = (List) ois.readObject();

} catch (IOException e) {

LOGGER.error("对象中包含没有继承序列化的对象: " + e.getMessage());

} catch (ConfigurationException e) {

LOGGER.error("对象中包含没有继承序列化的对象: " + e.getMessage());

} catch (ClassNotFoundException e) {

LOGGER.error("对象中包含没有继承序列化的对象: " + e.getMessage());

}

finally{

try {

if(ois != null){ois.close();ois =null;}

if(byteIn != null){byteIn.close();byteIn = null;}

if(out !=null ){out.close();out = null;}

if(byteOut != null ){byteOut.close(); byteOut = null;}

} catch (IOException e) {

LOGGER.error("对象关闭失败: " + e.getMessage());

}

}

return destList;

}

java修改显示原值_项目中copy List 数据,解决修改值后改变原值问题(SerialKiller)...相关推荐

  1. linux eclipse乱码,Eclipse项目中乱码问题的解决办法

    一.产生的原因: 1.Http协议进行通信的时候是基于请求和响应的,传输的内容我们称之为报文! 2.Http协议会按照一定的规则将报文编码,然后在读取的时候再使用响应的解码格式进行解码! 3.这个一定 ...

  2. springboot项目中mybatis实现数据的基本查询

    SpringBoot项目中mybatis实现数据的基本查询 本章内容概述: mapper 查询 xml 文件基本使用 通过 mybatis 实现一条数据的查询 1 用户数据表 2 用户信息对应的实体类 ...

  3. React项目中请求跨域解决方法

    React项目中请求跨域解决方法 今天经理给我了一个React项目地址,让我拉下来并跑起来,拉下来运行起来后,发现所有的请求都失败了,并且都是由于跨域问题导致的.花了点时间,解决了这个问题,在这里记录 ...

  4. Vue项目中你是如何解决跨域的呢?

    Vue项目中你是如何解决跨域的呢? 一.跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源( ...

  5. java中如何限制输入非空_项目中的参数限制、非空、以及集合中的验证,你真的会做吗(Java)...

    背景: 在项目管理中,我们通常要对一个个参数做验证, 前端校验,后端加校验,这里为了保证校验的一致性,我们需要将我们的校验写的比较高效率一点,不至于满篇都是is null的进行参数验证,为了成为一个成 ...

  6. java修改配置文件参数_在java类中获取在.properties配置文件中设置的参数

    如何获取.properties配置文件中的参数,我在网上查了半天没弄明白,后来在以前的项目中找到了,就写下来,避免遗忘. 1.配置文件:message_product.properties total ...

  7. git 修改分支名字_开发中必须要掌握的 Git 技巧

    前言 本文是参考杜老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作下此文是为以后学习,工作,开发中如果遇到问题可以回过头来参考参考.因为水平有限,难免会有出错的地方,欢迎指正. ...

  8. 读写分离怎么实现_项目中如何实现读写分离?怎么配置?

    上篇文章中,在两个 windows 系统的电脑上安装了最新版 8.0.21 MySQL 数据库,并且配置了主从.MySQL如何配置读写分离? 主从复制的原理思想也很简单,就是从库不断地同步主库的改动, ...

  9. IntelliJ IDEA 如何知道项目中的模块数据_如何从项目源中选择模块加入当前项目中(添加模块)_如何移除项目中的模块(移除模块/删除模块)

    文章目录 IDEA 如何获取项目的模块数据 从项目源中选择模块加入当前项目中 如何移除项目中的模块 方式一,选择模块的根目录(Content Root),鼠标右键 Remove 方式二,打开[项目结构 ...

  10. jsp怎么从后台读取远程共享文件夹下的图片在前端显示_Vue后台项目中遇到的技术难点以及解决方案

    作者:yeyan1996 转发链接:https://juejin.im/post/5c76843af265da2ddd4a6dd0 写在前面 金三银四招聘时间已经过去,很多公司开启了今年第二轮招聘的热 ...

最新文章

  1. Linux中命令配置防火墙
  2. python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践
  3. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 | 证明 共轭对称序列 x_e(n) 的 傅里叶变换 是 原序列傅里叶变换 的实部 )
  4. easyui、表格中添加操作一列,将操作下设置为修改,点击修改弹出该行对象的编号。
  5. 一个程序员的成长的六个阶段(转帖)
  6. 面向对象的javascript-引用、作用域、闭包、上下文--(1)
  7. C/C++代码调试:快速定位内存的申请和释放的位置
  8. 总结的AngularJS1版本的一些面试问题
  9. VMware Harbor现已加入Rancher社区Catalog
  10. 共享淘宝客APP和独立淘宝客APP的区别
  11. Sublime Text 2 代码编辑器使用技巧
  12. 虚拟机桥接模式下的网络设置
  13. Python学习笔记-循环语句
  14. Homekit智能通断器
  15. BF算法和KMP算法详解
  16. Jquery不同版本的兼容性
  17. 微软 2021 校园招聘正式启动!
  18. 系统集成项目管理工程师_系统集成项目管理工程师,拿到证书可直接办理入户...
  19. 【融云出海白皮书免费看】出海洞察之沙特的「土豪行为」盘点
  20. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

热门文章

  1. 北京化工大学历年真题整理:没考上,换了个学校,但还是在北京~哈哈(总结的算法题,有缘人自取之)
  2. OpenCV之计算时间差
  3. smmu 学习笔记之get_sgtable
  4. Typora pojie版 MAC wins
  5. Doo Prime 德璞资本:金砖国家新成员能否挑战美元主导地位?
  6. CentOS 6.5 + Win 7 双系统U盘安装及问题汇编
  7. ZYNQ学习笔记(五):redpitaya板工程程序固化到SD卡(同黑金开发板)
  8. 配合debian搭建KMS服务器,激活Win和Office
  9. 文献阅读-VQAR-基于计算机视觉和自然语言处理的信息检索技术综述
  10. 从0到1--ccap实现前端图片验证码