Couchbase SDK无法解码二进制文档
我正在尝试从Couchbase 4.0.0-4051社区版获取cbworkloadgen上载的二进制文档。Couchbase Java客户端版本为2.4.1 解码器给出的例外是-Couchbase SDK无法解码二进制文档,couchbase,couchbase-java-api,Couchbase,Couchbase Java Api,我正在尝试从Couchbase 4.0.0-4051社区版获取cbworkloadgen上载的二进制文档。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", ca
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来说,一切正常。行是异步视图行
我做错了什么?有人能告诉我吗?或者这是与标志字段中的值不正确有关的错误?您不能自己解码二进制文档。如果您保存实现Serializable的内容,它将被序列化并保存到Couchbase,您可以轻松地检索相同的内容。但是,如果启动N1QL查询并尝试获取二进制数据,则无法对其进行解码。这是Couchbase还不支持的。您也可以对Json文档执行同样的操作。好吧,由于时间不够,我改变了方法,因为在一个文档上异步迭代视图时,也会出现内存不足错误
关于这个问题,可能是他将cbworkloadgen为每个文档设置的字段标记为0,而不带-j选项,并且二进制代码转换器认为它不是二进制文档,因为这个值。我通过使用N1ql而不是执行get()绕过了这个问题。但是,我不确定这是否是cbworkloadgen的一个问题,因为它没有设置正确的标志。您可以添加更多信息以获得更精确的答案,如实际要保存和获取的内容等。@geraldss您可以查看一下。我对java sdk不太感兴趣,但只对spring-couchbase-cache.rohanagarwal感兴趣——这些N1QL函数与java无关。为了澄清,我没有使用N1QL,而是使用sdk提供的get()。CouchBaseAyncBucket类中的get()引用标志并继续解码文档(例如二进制或Json)。但是,标志值(0x0)被二进制转码器拒绝。我想知道这是Couchbase workload generator的问题还是我遗漏了什么。