WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 六 文本提取(上) 阅读

深入浅出 jackrabbit 六 文本提取(上)

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 需要注意的是getSwappedOutReader这个方法,该方法用临时文件的方式来节约内存,深入浅出 jackrabbit 六 文本提取(上)(7),但不是说什么地方都可以使用这种方法的,因为提取之后的问题可能在后面才能被用到,但是getReader会捕获这个异常,并返回一个null*/ext

需要注意的是getSwappedOutReader这个方法,该方法用临时文件的方式来节约内存。但不是说什么地方都可以使用这种方法的,因为提取之后的问题可能在后面才能被用到,所以暂时存放在临时文件中是可行的,这种方式在下载工具中非常常见,一般下载工具下载文件时会创建临时文件也是同样的道理。

接着,我们再来看看第二中方式触发(事实上,最开始触发这个方法的地方才是真正的第二种触发,它在什么地方呢,请参考AbstractIndex#getFinishedDocument(xx),再文本提取的第二篇文章中也有比较详细的说明):

Java代码   

public boolean isExtractorFinished() { 
    if (!jobStarted) { 
      try { 
/*如果任务还没有开始,那么则把job放到线程池中执行,并且将jobStarted设置为true, */ 
        executor.execute(job); 
        jobStarted = true; 
      } catch (InterruptedException e) { 
        // this thread is in interrupted state 
        return false; 
      } 
/*然后开始提取的操作,同时,提取的时候有一个超时时间,代表超过多长时间就直接返回,默认时间是100毫秒,在repository.xml中的 SearchIndex节点中可以配置,一旦超时之后,reader就会被写入到临时文件中,下次读取就从临时文件中读取*/ 
      extractedText = job.getReader(timeout); 
    } else { 
      // job is already running, check for immediate result 
/*如果任务已经在上次检查中被触发过了,那么就直接获取提取之后的结果,如果还没有提取完,0表示没有提取完则抛出TimeoutException,但是getReader会捕获这个异常,并返回一个null*/ 
      extractedText = job.getReader(0); 
    } 
/*如果extractedText并且提取的时候出现异常,超时等,那么就置其为空*/ 
    if (extractedText == null && job.getException() != null) { 
      // exception occurred 
      extractedText = new StringReader(""); 
    } 
 
    return extractedText != null; 
  }

上一页  2 3 4 5 6 7 8  下一页

Tags:深入浅出 jackrabbit 文本

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接