【发布时间】:2015-04-12 06:34:46
【问题描述】:
我在 Java 中有一个带有字节数组的类。当我对类的对象进行序列化和反序列化时,Byte Array的值在变化。
我该如何解决这个问题?
请看示例代码:
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
【问题讨论】:
-
sunil,请参阅我的答案,详细解释为什么您会获得序列化和反序列化对象的不同字符串表示形式。
-
你没有打印字节数组的内容。
-
@sunilzacharias 请阅读:What should I do when someone answers my question
标签: java serialization bytearray deserialization