Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Tika检测返回不一致的结果_Java_File Type_Apache Tika - Fatal编程技术网

Java Apache Tika检测返回不一致的结果

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); 上面的代码给

我正在尝试使用ApacheTika查找文件的内容类型

虽然我发现了这种不一致的行为

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当然在检测过程后丢失。