我正在尝试在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)
答案 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>