gpt4 book ai didi

java - 在 Java 中使用字节数组序列化一个类

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:23 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com