微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中使用字节数组序列化类

我在 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()来打印数组的内容.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐