我有一个用例,其中我要序列化Cassandra BoundStatement并将其转换为byte[]数组,并通过网络发送并将其反序列化回Bound Statement对象。

我正在使用Java 8。

但是问题是BoundStatement没有实现Serializable接口。

有什么方法可以序列化BoundStatement,通过HTTP发送并将其反序列化回BoundStatement

最佳答案

如果要序列化BoundStatement,则还必须序列化PreparedStatementDataWrapper,因为BoundStatement会同时使用它们。

即使可以序列化BoundStatement,也不能在没有创建它的会话的情况下执行它。如果在其他会话中执行BoundStatement,驱动程序将抛出InvalidQueryException

Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Tried to execute unknown prepared query : 0x0c245df8681f7dc939aba0c76164e4d3. You may have used a PreparedStatement that was created with another Cluster instance.
    at com.datastax.driver.core.SessionManager.makeRequestMessage(SessionManager.java:571)
    at com.datastax.driver.core.SessionManager.executeAsync(SessionManager.java:131)
    at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:68)
    ...

07-27 21:52