如何检查InputStream是否已被使用?



我正在处理一个任务,并且对代码审查有一个问题-我们需要确保输入流在这里被消耗吗?'

public void processInputStream(final DataInputStream dataInputStream, final OutputStream output) {
try {
// doing something with dataInputStream!!
} catch (IOException e) {
// doing something with IOException
}
}

我有几个问题-

我假设如果InputStream处理被中断,那么我的catch块将被触发。对吗?如果是这样,是否就不需要确保流已经被消耗了?#2在这种情况下,我如何检查InputStream已被消耗?

感谢更新——

处理我的InputStream的一部分涉及使用-

copyInputStreamToFile(..)

From Apache commons https://commons.apache.org/proper/commons-io/javadocs/api-2.7/org/apache/commons/io/FileUtils.html#copyInputStreamToFile-java.io.InputStream-java.io.File-

他们的文档说-

将字节从InputStream源复制到文件目标。如果到目标的目录不存在,将创建它们。如果目的地已经存在,它将被覆盖。源流已关闭。请参阅copyToFile(InputStream, File)获取不关闭输入流的方法。

这是否意味着给定源流是关闭的,那么这包括检查InputStream是否已被消耗?

您可以使用以下方法检查InputStream是否已耗尽:

package example;
import java.io.IOException;
import java.io.InputStream;
public class SO {
public static boolean isExhausted(InputStream in) throws IOException {
final boolean exhausted;
if (in.markSupported()) {
in.mark(1);
exhausted = in.read() == -1;
in.reset();
} else {
throw new IllegalStateException("mark is not supported on this inputstream");
}
return exhausted;
}
}

注意,这只在InputStream支持标记和重置方法(in.markSupported())时才有效

成功了!

private void consumeQuietly(final InputStream inputStream) {
try (OutputStream out = NullOutputStream.NULL_OUTPUT_STREAM) {
IOUtils.copy(inputStream, out);
} catch (IOException ioException) {
// Log something!!
}
}
public void processInputStream(final DataInputStream dataInputStream, final OutputStream output)
{
try
{
// doing something with dataInputStream!!
}
catch (InterruptedException ie)
{
// doing something with InterruptedException
}
catch (IOException ioe)
{
// doing something with IOException
}
}

您可以使用inputStream.available()方法来确定输入流是否被消耗。

相关内容

  • 没有找到相关文章

最新更新