如何将非可序列化对象转换为字节数组?

我正在尝试使用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中/解码器。