深入浅出 jackrabbit 六 文本提取(上)
2009-09-17 00:00:00 来源:WEB开发网现在我们要做的就是跟到PooledTextExtractor# extractText方法中去,其他能做的也不多:
Java代码
public Reader extractText(InputStream stream,
String type,
String encoding,
String jobId) throws IOException {
if (null == jobId || "".equals(jobId)) {
//结合上面的方法,我们得知,jobid的值是一个node的id
return extractText(stream, type, encoding);
} else {
/*在这里,创建了一个TextExtractorJob,它是Runnable的一个实现类*/
TextExtractorJob job = new TextExtractorJob(extractor, stream, type, encoding, jobId);
return new TextExtractorReader(job, executor, timout);
}
}
从上面的方法中,我们可以看到一个简单的逻辑,创建一个thread,然后放到池中执行,并返回结果。
先看看创建线程的流程:
Java代码
public TextExtractorJob(final TextExtractor extractor,
final InputStream stream,
final String type,
final String encoding,
final String jobId) {
this.type = type;
this.jobId = jobId;
this.cmd = setter(new Callable() {
public Object call() throws Exception {
Reader r = extractor.extractText(stream, type, encoding);
if (r != null) {
if (discarded) {
r.close();
r = null;
} else if (timedOut) {
// spool a temp file to save memory
/*这里的逻辑非常重要,这里的逻辑表明,一旦方法执行到这里,表示上面的extractor.extractText 已经超过了我们预设的时间,所以为了避免占用过多的内存,需要把内存中的数据拷贝到磁盘上,以减少内存的消耗。*/
r = getSwappedOutReader(r);
}
}
return r;
}
});
}
Tags:深入浅出 jackrabbit 文本
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接