【问题标题】:InputStream will not reset to beginningInputStream 不会重置为开头
【发布时间】:2011-10-06 16:52:51
【问题描述】:
InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.read(preview, 0, 100);

// 现在我想稍后引用 InputStream,但我希望它从流的开头开始,而不是 100 字节。我在 100 处尝试了mark(),然后在阅读了reset()前 100 个字节,但这也不起作用。

有什么想法吗?可能是一个愚蠢的错误..只是没有看到它。

【问题讨论】:

    标签: java parsing inputstream


    【解决方案1】:

    如果InputStream 支持标记(您可以使用markSupported() 方法检查),那么以下应该可以工作:

    InputStream data = realResponse.getEntity().getContent();
    byte[] preview = new byte[100];
    data.mark(100);
    data.read(preview, 0, 100);
    data.reset();
    

    但是,请注意,data.read(preview, 0, 100)保证一次性读取 100 个字节,它可能会读取更少。

    【讨论】:

    • 如果不知道realResponse 类是什么(以及它所在的库版本),我无法回答这个问题。
    【解决方案2】:

    当您使用java.io.InputStream 对象的mark() 时,您应该使用markSupported() 方法检查您的InputStream 是否确实支持使用标记。根据 API,InputStream 类没有,但 java.io.BufferedInputStream 类可以。也许您应该将流嵌入到 BufferedInputStream 对象中,例如:

    InputStream data = new BufferedInputStream(realResponse.getEntity().getContent());
    // data.markSupported() should return "true" now
    data.mark(some_size);
    // work with "data" now
    ...
    data.reset();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2013-07-24
    相关资源
    最近更新 更多