如何从Couchbase读取二进制文档 - JavaSDK API

时间:2015-07-31 19:07:15

标签: java file couchbase

我正在尝试在couchbase中插入和检索小文件,插入成功但是当我尝试获取内容并将其写入文件时,我的信息低于错误。

    BinaryDocument responsefromDB = bucket.get("KESAVAN", BinaryDocument.class);
    try {
        FileOutputStream ostream = new FileOutputStream("C:\\Satz\\Test - Copy\\Output.txt");
        ostream.write(responsefromDB.content().array());
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

错误: 线程" main"中的例外情况java.lang.UnsupportedOperationException:直接缓冲区     在com.couchbase.client.deps.io.netty.buffer.PooledUnsafeDirectByteBuf.array(PooledUnsafeDirectByteBuf.java:363)     在com.couchbase.client.deps.io.netty.buffer.SlicedByteBuf.array(SlicedByteBuf.java:97)     在com.couchbase.client.deps.io.netty.buffer.CompositeByteBuf.array(CompositeByteBuf.java:463)     在com.util.task.CouchbaseClient.main(CouchbaseClient.java:52)

1 个答案:

答案 0 :(得分:1)

如果array()返回true,则只能访问hasArray()。否则,Netty缓冲区本身由本机内存支持。在这种情况下,您需要使用其中一种getBytes(...)方法将内容复制到数组中。

在获取缓冲区之后不要忘记release()缓冲区(例如,在try catch的finally块中)。

您似乎将内容输出到文本文件中,BinaryDocument真的是您之后的内容吗?也许StringDocument会更好,更少障碍,合适吗? (见http://docs.couchbase.com/developer/java-2.1/documents-basics.html)。

请注意,如果您仍有令人信服的理由使用BinaryDocument并希望输出为String,则可以使用ByteBuf.toString(Charset)代替getBytes。< / p>