Java Apache Tika检测返回不一致的结果
我正在尝试使用ApacheTika查找文件的内容类型 虽然我发现了这种不一致的行为Java Apache Tika检测返回不一致的结果,java,file-type,apache-tika,Java,File Type,Apache Tika,我正在尝试使用ApacheTika查找文件的内容类型 虽然我发现了这种不一致的行为 final Tika tika = new Tika(); String fileType = tika.detect(uploadedInputStream); System.out.println(fileType); String newFileType = tika.detect(uploadedInputStream); System.out.println(newFileType); 上面的代码给
final Tika tika = new Tika();
String fileType = tika.detect(uploadedInputStream);
System.out.println(fileType);
String newFileType = tika.detect(uploadedInputStream);
System.out.println(newFileType);
上面的代码给出了我的输出
application/pdf
application/octet-stream
在这两种情况下,我都希望输出为application/pdf
有人能解释为什么会这样吗?如何获得预期结果?当我按照评论中的建议将InputStream包装到TikaInputStream中时,我可以看到问题已经解决
final Tika tika = new Tika();
TikaInputStream tikaInputStream = TikaInputStream.get(uploadedInputStream);
String fileType = tika.detect(tikaInputStream);
System.out.println(fileType);
final Tika newTika = new Tika();
String newFileType = newTika.detect(tikaInputStream);
System.out.println(newFileType);
输出:
application/pdf
application/pdf
ApacheTika对在不改变输入流状态的情况下可以检测哪种类型的输入流有一些要求。如果你试着把你的包在一个提卡输入流中会发生什么?非常感谢,这一个帮助了我。你能告诉我更多关于,为什么它发生在正常的InputStream上,以及TikaInputStream是如何解决的吗?当Tika完成检测时,它需要为下一个用户回放流(例如第二次检测)。如果您的流声称支持倒带,但实际上不支持倒带,那么这些字节就消失了,您就被填满了……除了@Gagravarr注释:如果Tika发现InputStream不支持倒带(即,对于
InputStream,返回false
)\isMarkSupported
)Tika将其包装到BufferedInputStream
以进行实际检测,并消耗一些千字节的原始流(如果使用Tika#detect
或MimeTypes#detect
,则高达64k)<代码>BufferedInputStream当然在检测过程后丢失。