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

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

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 现在我们要做的就是跟到PooledTextExtractor# extractText方法中去,其他能做的也不多:Java代码publicReaderextractText(InputStreamstream,Stringtype,Stringencoding,StringjobId)throw

现在我们要做的就是跟到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; 
      } 
    }); 
  }

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

Tags:深入浅出 jackrabbit 文本

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