我正在尝试从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。
我做错了什么?有人可以告诉我吗?或者这是与标志字段中的错误值相关的错误吗?
答案 0 :(得分:1)
好吧,由于时间的原因,我改变了方法,因为在数百万个文档中异步迭代视图时,我也遇到了内存错误。
关于这个问题,可能是他为每个文档设置了cbworkloadgen而没有-j选项的字段为0,而BinaryTranscoder认为它不是二进制文件,因为这个值。我通过使用N1ql而不是使用get()解决了这个问题。但是,我不确定这是否是cbworkloadgen的问题,它没有设置正确的标志。
答案 1 :(得分:0)
您无法自行解码二进制文档。如果您保存了实现Serializable的内容,它将被序列化并保存到Couchbase,您可以轻松地检索它。但是,如果您触发N1QL查询并尝试获取二进制数据,则无法对其进行解码。这是Couchbase尚不支持的。您可以使用Json docs执行相同的操作。