如何将非可序列化对象转换为字节数组?
我正在尝试使用javax.crypto.Cipher.doFinal(byte [])方法来加密对象。 但是,出于安全原因,该对象无法序列化。 那么,如何在没有序列化的情况下将对象转换为字节数组?
–update
使用序列化是使用此Cipher方法的唯一方法吗? 因为据我所知,重要数据不应该是可序列化的。
您只需序列化每个组件。 递归。 最终,您最终会得到可以序列化的本机对象。
如果通过实现java的序列化方法来实现它,java将确保您不会将任何对象序列化两次,并将为您处理引用。
简而言之,使对象可序列化。
下面是将类序列化为字节数组的简单示例。
public Class Foo { private boolean isHappy; private short happyCount; private Bar bar; public byte[] serializeData () throws IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream( stream ); out.writeBoolean(isHappy); out.writeShort( slope ); // Serialize bar which will just append to this byte stream bar.doSerializeData(out); // Return the serialized object. byte[] data = stream.toByteArray(); // Clean up. stream.close(); return data; } }
当然,你案例中的很多细节都取决于你的class级结构,但希望这能让你指出正确的方向。
要反序列化你只需要反转上面的内容。
解决了,而不是使用getByteArray()来调用Cipher.doFinal(),我将在类中使用Cipher.doFinal(),使用getEncryptedByteArray()方法; 所以我在类中序列化数据而不使类本身可序列化,并且返回结果将被加密。 对此方法的任何异议都将被考虑.. 🙂
java.beans.XMLEncoder中/解码器。
- 什么是java中的类级锁
- 从Java启动Spring应用程序的exception
- 如何创建守护程序线程? 什么?
- 使用Maven 2和Glassfish 3对EJB进行unit testing
- spring boot org.springframework.beans.factory.BeanCreationException:无法自动assembly字段:
- 无法将连接强制转换为oracle.jdbc.OracleConnection
- Java库运行时与编译时间
- 在Eclipse IDE中调试Java时将exception作为表达式捕获
- JEditorPane中的可点击HTML链接但是使用replaceSelcetion方法