我正在尝试使用 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);
我希望文件中的所有文本都能在屏幕上打印出来,但是 小部分到底是不是。更具体地说,characters() 回调 每个回调持续读取 4,096 个字符,但最后显然 省略了这个特定文件的最后 5,083 个字符(这是几个 MB 长),所以它甚至超出了错过最后一个回调的范围。
此外,在另一个约 5,000 个字符长的小文件上进行测试, 似乎没有回调发生!
在这两种情况下,MIME 类型都被正确检测为 text/plain。
有什么想法吗?
谢谢!
最佳答案
您使用的是什么版本的 Tika?查看源代码,它读取了 4096
字节的 block ,可以在 TXTParser 的 129
行看到。 .在 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
。我看不出此代码有任何缺陷,因此我认为您可能使用的是旧版本?
关于java - Apache 提卡 : Parsing a text file omits last part?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616719/