刚刚完成一个WEB SERVICE的项目,其中用到了安全方面的东西,传送前要用DES加密,我只能把对象中的每条属性都转换成字节数组,然后加密,最后传送到服务端。。
怎么能把对象A里20多个字段转成字节数组并复制到对象B中呢(对象A中都是Integer类型,对象B中都是字节数组型的类型,属性名称和A中相同,都有getter和setter方法)
首先想到了beanutils的用法,但这个类不可以转换类型啊?于是,自己写了一个类,来实现上面的需求。
Converter类 代码
-
-
-
-
-
- public static void convertToByte(Object obj1,Object obj2) {
-
- Class obj1Class=obj1.getClass();
- Method[] obj1methods=obj1Class.getDeclaredMethods();
-
- Class obj2Class=obj2.getClass();
- Method[] obj2methods=obj2Class.getDeclaredMethods();
-
-
- Map obj2MeMap=new HashMap();
- for(int i=0;i<obj2methods.length;i++)
- {
- Method method=obj2methods[i];
- obj2MeMap.put(method.getName(),method);
- }
-
- ByteArrayOutputStream bo = new ByteArrayOutputStream();
-
- for(int i=0;i<obj1methods.length;i++)
- {
- String methodName=obj1methods[i].getName();
- if(methodName!=null&&methodName.startsWith("get"))
- {
-
- try{
-
- Object returnObj=obj1methods[i].invoke(obj1, new Object[0]);
-
- ObjectOutputStream oo = new ObjectOutputStream(bo);
- oo.writeObject(returnObj);
- byte[] bytes = bo.toByteArray();
-
- byte[] encryptbytes = encryptField(bytes);
-
- Method obj2method=(Method)obj2MeMap.get("set"+methodName.split("get")[1]);
-
- obj2method.invoke(obj2, encryptbytes);
- }catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
- }
利用JAVA反射机制可以动态获得对象实例的类型信息,比如得到对象中定义的方法,并可以调用这些方法,实现属性的拷贝
本方法还用到了将一个JAVA对象转换成字节数组的方法:利用输入输出流 ByteArrayOutputStream --ObjectOutputStream
将字节数组转换成对应的对象,要用到:ByteArrayInputStream ObjectInputStream
字节数组转换成对象 代码
-
- byte[] decryptedByte =decryptField(returnByte);
- ByteArrayInputStream bi = new ByteArrayInputStream(decryptedByte);
- ObjectInputStream oi = new ObjectInputStream(bi);
- Integer inteObj = (Integer)oi.readObject();
-
- Method obj2method=(Method)obj2MeMap.get("set"+methodName.split("get")[1]);
- obj2method.invoke(obj2, inteObj);
分享到:
相关推荐
在给定的标题和描述中,我们关注的是如何利用反射机制来实现对象的深度拷贝。深度拷贝是指创建一个与原对象完全独立的新对象,包括所有嵌套对象的副本。以下将详细解释如何通过反射和序列化来实现这一目标。 首先,...
内容概要:本资源提供了一个Java Bean转换工具类示例,展示了如何使用反射和JSON序列化实现对象之间的属性拷贝。该工具类包含两个主要方法:convertTo和convertByJackson,前者基于反射用于结构相同的对象间的属性...
这段代码利用了反射机制,找到Java Bean类中的setter方法,根据JSON中的键值对调用setter方法设置属性值。 另一种常见的方式是使用Gson库,它的使用更加简洁。首先,引入Gson库,然后使用`Gson.fromJson()`方法进行...
-java 创建对象的四种方法是指在 Java 中创建对象的不同方式,它们分别是使用 new 语句创建对象、使用反射机制创建对象、使用 clone() 方法创建对象和使用反序列化机制创建对象。 - 使用 new 语句创建对象是 Java ...
总之,Java反射提供了一种强大的机制,允许我们在运行时检查和操作类和对象。它在许多场景下非常有用,比如框架开发、动态代理、序列化、元数据操作等。同时,复制bean的值也是常见的需求,尤其在数据处理和对象模型...
在Java编程语言中,"反射拷贝属性"是一种利用反射机制来复制对象属性的技术。反射是Java提供的一种强大工具,允许程序在运行时检查和操作类、接口、字段和方法等对象。通过反射,我们可以动态地获取类的信息并操作类...
除了通过实现`Cloneable`接口和利用序列化机制外,还可以通过以下方式实现拷贝: - 使用Java反射API来复制对象。 - 使用Apache Commons Lang库中的`BeanUtils.copyProperties`方法。 - 使用第三方库如Guava提供的...
标题中的“通过构造及反射实现类属性赋值”涉及到的技术是Java的构造函数和反射机制。这两种方法在特定场景下能帮助我们更灵活、更深入地处理对象属性的复制。 首先,构造函数是创建新对象时调用的特殊方法,它可以...
在Java开发中,对象间的属性拷贝是一个常见的需求,特别是在数据转换、模型绑定或服务调用等场景。本文将深入探讨如何利用注解(Annotation)来实现这一功能,以提高代码的可读性和可维护性。我们将从标题“利用...
### Java 高级特性详解 #### 一、`hashCode` ...正确地重写 `equals` 和 `hashCode` 方法、使用 `Comparator` 进行排序、利用反射机制和序列化技术,以及实现 `clone` 方法都是开发高质量 Java 应用程序的重要技能。
总之,这些面试题涵盖了Java的核心概念和技术,包括对象克隆、多态性、异常处理、集合框架、泛型、多线程、反射、注解、数据类型和内存管理等,这些都是成为一名合格的Java开发者必须掌握的知识点。
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。...掌握这些核心概念和技术将有助于开发者更好地利用Java来解决问题。
本文将对 Java 中的访问修饰符、运算符、垃圾回收机制、自动装箱和自动拆箱、类加载机制、异常层次结构、接口和抽象类、内部类、深拷贝和浅拷贝、String、StringBuilder 和 StringBuffer、集合框架、泛型、反射、...
4. **深拷贝与浅拷贝**:虽然Object类不直接提供拷贝功能,但它的`clone()`方法可以实现对象的复制。不过,`clone()`默认是浅拷贝,如果对象中包含复杂数据结构(如数组或引用其他对象),需要自行处理以实现深拷贝...
Java中实现多态的机制主要依赖于继承和接口,多态性表现为方法的重载和重写。 35. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 垃圾回收器的基本原理是...
节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...
Java 中的动态代理是通过反射机制实现的,它可以在运行时动态地生成代理类,并将代理类的方法调用转发给被代理的对象。 二十二、Lambda 表达式 Java 中的 Lambda 表达式是一种简洁的函数式编程语法,它可以用来...
Java中可以使用Serializable接口来实现对象的序列化和反序列化。 **I/O流基础:** Java中I/O流用于处理输入输出操作,包括文件、网络等。 **流的分类:** 流可以分为字节流和字符流两大类。 **I/O输入输出:** ...