3

我试图将 gov.nist.javax.sip.stack.SIPDialog 对象序列化和反序列化到 Cassandra 中。但是当我将反序列化对象与我序列化的原始 SIPDialog 对象进行比较时,对反序列化对象的等于比较失败。所以看起来我在序列化中遗漏了一些东西。我正在使用 ByteArraySerializer 将字节读/写到 Cassandra。

//保存对话框

MutationBatch mutationBatch = createMutator();
byte[] dialogBytes = SIPDialogEntity.serializeDialog(dialog);

mutationBatch.withRow(SIPDIALOGS, dialogId)
.putColumn("dialog".getBytes(),dialogBytes,null);
mutationBatch.execute();

public static byte[] serializeDialog(SIPDialog dialog) throws IOException {

    ByteArrayOutputStream bStream = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bStream);       
    oos.writeObject(dialog);
    oos.close();
    byte[] bytes = bStream.toByteArray();
    bStream.close();

    return bytes;
}   

//阅读对话框

Column<byte[]> result;
result = getKeySpace().prepareQuery(SIPDIALOGS).getKey(dialogId).getColumn("dialog").execute().getResult();
        sipDialog = SIPDialogEntity.deserializeDialog(result.getByteArrayValue());

public static SIPDialog deserializeDialog(byte[] byteArrayDialog) throws IOException, ClassNotFoundException {      
    System.out.println("DEBUG Reading Dialog Bytes:" + byteArrayDialog );       
    ByteArrayInputStream bStream = new ByteArrayInputStream(byteArrayDialog);
    ObjectInputStream ois = new ObjectInputStream(bStream);     
    SIPDialog dialog = (SIPDialog) ois.readObject();
    ois.close();
    bStream.close();
    return dialog;
}   
4

2 回答 2

2

SIPDialog 类不会覆盖 equals 方法,这就是比较失败的原因。请在http://java.net/jira/browse/JSIP上用 jain sip 打开一个问题

于 2012-10-19T09:26:39.593 回答
0

嗯,如果 SipDialog 是您的课程,您可以跳过所有工作并使用 PlayOrm 进行 cassandra ;)。然后你不需要处理序列化/反序列化。

如果它不是您的课程,我想我会让他们添加一种方法来添加要转换为实体的 3rd 方 bean,就像 Guice 在绑定文件中所做的那样,它可以绑定到可以由 PlayOrm 保存的实体。如果您通过请求在 PlayOrm 上开票,我们可能会在短短 1 周内获得该功能。

于 2012-10-18T13:36:25.247 回答