Java ApacheTika:解析文本文件会忽略最后一部分吗?

Java ApacheTika:解析文本文件会忽略最后一部分吗?,java,apache,apache-tika,Java,Apache,Apache Tika,我试图用Tika解析一个纯文本文件,但不一致 行为 更具体地说,我定义了一个简单的处理程序,如下所示: public class MyHandler extends DefaultHandler { @Override public void characters(char ch[], int start, int length) throws SAXException { System.out.println(new String(ch));

我试图用Tika解析一个纯文本文件,但不一致 行为

更具体地说,我定义了一个简单的处理程序,如下所示:

public class MyHandler extends DefaultHandler
{
     @Override
     public void characters(char ch[], int start, int length) throws SAXException
     {
        System.out.println(new String(ch));
     }
}
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);
然后,我将文件(“myfile.txt”)解析如下:

public class MyHandler extends DefaultHandler
{
     @Override
     public void characters(char ch[], int start, int length) throws SAXException
     {
        System.out.println(new String(ch));
     }
}
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);
我希望文件中的所有文本都能在屏幕上打印出来,但是 小部分到底不是。更具体地说,是characters()回调函数 每次回调都会读取4096个字符,但最后显然 省略此特定文件的最后5083个字符(仅几个字符) MB长),因此它甚至超出了错过最后一次回调的范围

另外,在另一个大约5000个字符长的小文件上进行测试, 似乎没有发生回调

在这两种情况下,MIME类型都被正确检测为text/plain

有什么想法吗


谢谢

您使用的是什么版本的Tika?查看源代码,它读取的是
4096
字节块,可以在的
129
行中看到。在第
132行
调用
字符(…)
例程

简而言之,目标代码是:

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

其中
读取器
缓冲读取器
。我看不到此代码中存在任何缺陷,因此我认为您可能正在使用较旧的版本?

您是否能够编写一个小的JUnit单元测试来显示问题?Tika中有几个用于文本解析的单元测试,它们都是解析的,所以很明显,您的案例需要另一个单元测试!我也看不出上述代码有任何缺陷,但问题仍然存在。很奇怪!