Apache Tika: При разборе текстового файла последняя часть опускается? - PullRequest
4 голосов
/ 08 июля 2011

Я пытаюсь проанализировать простой текстовый файл, используя Tika, но получаю непоследовательность поведение.

Более конкретно, я определил простой обработчик следующим образом:

public class MyHandler extends DefaultHandler
{
     @Override
     public void characters(char ch[], int start, int length) throws SAXException
     {
        System.out.println(new String(ch));
     }
}

Затем я анализирую файл (" myfile.txt ") следующим образом:

Tika tika = new Tika();
InputStream is = new FileInputStream("myfile.txt");

Metadata metadata = new Metadata();
ContentHandler handler = new MyHandler();

Parser parser = new TXTParser();
ParseContext context = new ParseContext();

String mimeType = tika.detect(is);
metadata.set(HttpHeaders.CONTENT_TYPE, mimeType);

tikaParser.parse(is, handler, metadata, context);

Я ожидаю, что весь текст в файле будет напечатан на экране, но малая часть в итоге нет. В частности, обратный вызов символов () продолжает читать 4096 символов для каждого обратного вызова, но в конце концов, по-видимому, пропускает последние 5 083 символов этого конкретного файла (что несколько Мегабайт), так что даже пропускается последний обратный вызов.

Кроме того, тестирование другого небольшого файла длиной около 5000 символов, кажется, что обратного вызова не происходит!

Тип MIME правильно определяется как text / plain в обоих случаях.

Есть идеи?

Спасибо!

1 Ответ

4 голосов
/ 08 июля 2011

Какую версию Тики вы используете?Глядя на исходный код, он читает куски 4096 байтов, которые можно увидеть в строке 129 из TXTParser .В строке 132 вызывается подпрограмма characters(...).

Короче говоря, целевой код:

   char[] buffer = new char[4096];
   int n = reader.read(buffer);
   while (n != -1) {
       xhtml.characters(buffer, 0, n);
       n = reader.read(buffer);
   }

, где reader - это BufferedReader.Я не вижу никаких недостатков в этом коде, поэтому я думаю, что вы, возможно, работаете с более старой версией?

...