我有一个 Java 字节数组类。当我序列化和反序列化类的对象时,字节数组的值在变化。
我该如何解决这个问题?
请看示例代码:
public class Test implements Serializable{
private static final long serialVersionUID = 3455892176538865707L;
public byte[] datakey;
public static void main(String[] args) {
byte[] key=new byte[16];
Random rn = new Random(); //Trying to randomize the byte array to use as a cryptographic key
rn.nextBytes(key);
Test test = new Test();
test.datakey=key;
System.out.println("Byte Array Before serialization : "+test.datakey);
test.serializeTest(test);
Test loadedtest=test.deserializeTest();
System.out.println("Byte Array After deserialization : "+loadedtest.datakey);
}
public void serializeTest(Test test)
{
FileOutputStream fos;
try {
fos = new FileOutputStream("test.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(test);
oos.flush();
oos.close();;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Test deserializeTest()
{
Test test=null;
String f="test.out";
try
{
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
test = (Test)ois.readObject();
ois.close();
fis.close();
}
catch(FileNotFoundException ex)
{
ex.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return test;
}
}
输出:
Byte Array Before serialization : [B@15db9742
Byte Array After deserialization : [B@75b84c92
最佳答案
字节数组的值没有改变。您只是打印数组的 toString()
表示。
将使用 java.lang.Object
中的默认 toString()
实现。
因为初始数组和反序列化数组不是同一个对象(它们是两个内容相同的独立对象),它们会有不同的hashCode()
。 Java 中的数组不会覆盖 equals()
和 hashCode()
。
您应该使用 Arrays.toString()
来打印数组的内容。
关于java - 在 Java 中使用字节数组序列化一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586709/