【问题标题】:reading InputStream读取输入流
【发布时间】:2023-04-04 22:48:01
【问题描述】:

我正在使用 Inputstream 从网络获取一些数据。我想制作一个日志来检查 InputStream 上是否有东西。 Log("InputStream = "+ is.read()) 我得到InputStream = 123 但后来当我使用它时,我得到 InputStream = -1。我猜这与迭代器的位置有关,但我在API of Java 中没有看到您必须使用reset()(就像您使用mark() 时一样)再次读取inputStream。

【问题讨论】:

    标签: java inputstream


    【解决方案1】:

    正确 - 向客户阅读。一旦你使用了流或迭代器,你就不能在不重置的情况下再次使用它。

    【讨论】:

      【解决方案2】:

      InputStream 不允许“偷看”下一个字符;相反,所有读取方法都会阻塞,直到数据可用。

      如果您需要偷看,请使用Java NIOSelector 可以告诉您是否有任何频道准备好数据。

      【讨论】:

        【解决方案3】:

        您可以将流包装在 PushbackInputStream 中。然后你可以这样做:

        int r = in.read();
        Log("InputStream = "+ r);
        in.unread(r);
        

        随后的阅读将重新阅读该字符

        【讨论】:

        • 如果没有可用的字符,这会不会挂起?
        【解决方案4】:

        example 使用mark()reset() 重新读取输入流,但它依赖于先验 对合适readlimit 的了解。根据您的需要,它可能是一种可用的缓冲策略。

        【讨论】:

          猜你喜欢
          • 2018-01-08
          • 2022-01-11
          • 2014-12-04
          • 2011-02-12
          • 2012-03-19
          • 2013-06-03
          相关资源
          最近更新 更多