java - 无法读取同一个InputStream两次

标签 java inputstream apache-tika boilerpipe

这是我的代码:

// getFile() method returns the input stream of a local or online file
InputStream fileStream = getFile(source);
// Convert an InputStream to an InputSource
org.xml.sax.InputSource fileSource = new org.xml.sax.InputSource(fileStream);
// Extract text via the Boilerpipe DefaultExtractor
String text = DefaultExtractor.INSTANCE.getText(fileSource);

// Extract text and metadata via Apache Tika
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();
AutoDetectParser parser = new AutoDetectParser();
parser.parse(fileStream, handler, metadata, context);

我不明白为什么只有第一个提取器起作用。

在这种情况下,只有 Boilerpipe (第一个提取器)可以工作,而 Apache Tika (第二个提取器)无法提取任何内容。

我尝试创建 fileStream 的副本(通过 InputStream fileStream2 = fileStream;)并将 fileStream 传递给一个读取器和 fileStream2 给另一个读者,但它也不起作用。

我还尝试将从 fileStream 中提取的 HTML 传递给 Boilerpipe,并将 fileStream 传递给 Tika,但结果是相同的。

我怀疑问题在于同一个InputStream无法读取两次。

您能帮我看看如何将 1 个 InputStream 的内容传递给 2 个读取器吗?

编辑: 我找到了解决方案并将其发布在下面

最佳答案

如果您有一个 Maven 项目,则必须包含这些依赖项(在 pom.xml 中),以便 boilerpipe 可以工作:

 <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>x.y.z</version>
 </dependency>
 <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>x.y.z</version>
</dependency>

关于java - 无法读取同一个InputStream两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559941/

相关文章:

android - 如何访问我放在 res 文件夹中的原始资源?

java - 将 Tika LanguageIdentifier 限制为仅特定语言

java - 如何使用 apache tika 阅读 pdf 书签?

java - 覆盖 AWT 并存储图形

java - 如何关闭 MarkLogic Java API 日志记录?

java - 图像在 3D 空间中绕 Y 轴旋转

java - Apache 提卡 : remove extra line breaks in result string

java - JdbcTemplate:以字符串形式访问 MySQL VARBINARY 字段

android - 无法从 Android 中的蓝牙设备读取任何数据

java - 从不同于网络(通过 Amazon S3)的本地文件读取 InputStream 对象有何不同?