繁体   English   中英

不能两次读取相同的InputStream

[英]Can't read the same InputStream twice

这是我的代码:

// 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>

我发现InputStream不能像我的旧代码中的Tika和Boilerpipe一样被读取两次,所以我发现我可以读取fileStream并将其转换为String ,将其传递给Boilerpipe,将String转换为ByteArrayInputStream并传递提卡。 这是我的新代码。

// getFile() method returns the input stream of a local or online file
InputStream fileStream = getFile(source);

// Read the value of the InputStream and pass it to the
// Boilerpipe DefaultExtractor in order to extract the text
String html = readFromStream(fileStream);
String text = DefaultExtractor.INSTANCE.getText(html);

// Convert the value read from fileStream to a new ByteArrayInputStream
fileStream = new ByteArrayInputStream(html.getBytes("UTF-8"));

// 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM