我正在使用Sesame库在内存中的三重存储上运行SPARQL查询.
我正在使用Clojure来实现这一目标.
查询结果是一个类似自定义Iterator的[1]对象,因此clojure seq不能在开箱即用的情况下工作.
将自定义java Iterator类似对象转换为clojure序列的最优雅方法是什么?
我想到的最明显和最愚蠢的想法是循环它并建立一个clojure向量,但我确信有更优雅的方法来解决这个问题.
[1] http://www.openrdf.org/doc/sesame2/api/info/aduna/iteration/Iteration.html
我一直在尝试编写一个HTTP客户端来同时获取多个提要(最多1k),这也是学习Netty 4的练习.
我的问题是,如果有一个很好的解释,新的ByteBuf基础设施如何工作?谁"拥有"他们,他们是如何分享的(是吗?)?ChannelPipeline中的每个ChannelHandler都有它自己的ByteBuf吗?
这是一个令我困惑的例子:
我将以下类的实例添加到HTTP客户端管道:
public class MyFilter extends MessageToMessageDecoder<HttpObject> {
@Override
protected Object decode(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
// do some work, but leave msg unchanged
BufUtil.retain(msg); // Why do I need to call BufUtil.retain(msg) ???
return msg;
}
Run Code Online (Sandbox Code Playgroud)
如果我没有在msg上调用BufUtil.retain,它似乎得到了GCd,我得到了各种各样的虚假错误.