Couchbase SDK无法解码二进制文档

时间:2017-02-07 12:06:35

标签: couchbase couchbase-java-api

我正在尝试从Couchbase 4.0.0-4051社区版获取cbworkloadgen上传的BinaryDocuments。 Couchbase Java客户端版本为2.4.1。

解码器给出的例外是 -

WARNING: Decoding of document with BinaryTranscoder failed. exception: Flags (0x0) indicate non-binary document for id pymc0, could not decode., id: "pymc0", cas: 1486468016723525632, expiry: 0, flags: 0x0, status: SUCCESS, content size: 2048 bytes, content: "".

    com.couchbase.client.java.error.TranscodingException: Flags (0x0) indicate non-binary document for id pymc0, could not decode.
com.couchbase.client.java.error.TranscodingException: Flags (0x0) indicate non-binary document for id pymc0, could not decode.
        at com.couchbase.client.java.transcoder.BinaryTranscoder.doDecode(BinaryTranscoder.java:32)
        at com.couchbase.client.java.transcoder.BinaryTranscoder.doDecode(BinaryTranscoder.java:26)
        at com.couchbase.client.java.transcoder.AbstractTranscoder.decode(AbstractTranscoder.java:42)
        at com.couchbase.client.java.CouchbaseAsyncBucket$1.call(CouchbaseAsyncBucket.java:274)
        at com.couchbase.client.java.CouchbaseAsyncBucket$1.call(CouchbaseAsyncBucket.java:270)
        at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:69)

我使用以下来获取文档 -


AbstractDocument<?> doc = destinationBucket.get((String) row.key(), isJson ? JsonDocument.class : BinaryDocument.class);

对于JsonDocument,一切正常。 row是AsyncViewRow。

我做错了什么?有人可以告诉我吗?或者这是与标志字段中的错误值相关的错误吗?

2 个答案:

答案 0 :(得分:1)

好吧,由于时间的原因,我改变了方法,因为在数百万个文档中异步迭代视图时,我也遇到了内存错误。

关于这个问题,可能是他为每个文档设置了cbworkloadgen而没有-j选项的字段为0,而BinaryTranscoder认为它不是二进制文件,因为这个值。我通过使用N1ql而不是使用get()解决了这个问题。但是,我不确定这是否是cbworkloadgen的问题,它没有设置正确的标志。

答案 1 :(得分:0)

您无法自行解码二进制文档。如果您保存了实现Serializable的内容,它将被序列化并保存到Couchbase,您可以轻松地检索它。但是,如果您触发N1QL查询并尝试获取二进制数据,则无法对其进行解码。这是Couchbase尚不支持的。您可以使用Json docs执行相同的操作。