读取输入流

发布于 2024-10-21 04:00:12 字数 372 浏览 5 评论 0原文

我正在使用输入流从网络获取一些数据。我想创建一个日志来检查 InputStream 上是否有内容。 Log("InputStream = "+ is.read()) 我得到 InputStream = 123 但后来当我使用它时,我得到InputStream = -1。我猜想这与迭代器的位置有关,但我在 Java API,您必须使用 reset() (就像使用 mark() 时一样)才能读取再次是输入流。

I am getting some data from network using an Inputstream. I want to make a log to check if the InputStream has something on it. Log("InputStream = "+ is.read()) and I get InputStream = 123
But later when I use it I get InputStream = -1. I guess is something related with the position of the iterator, but I haven't seen in the API of Java that you have to use a reset() (as when you use mark()) to read again the inputStream.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜巴黎 2024-10-28 04:00:12

正确——读给顾客听。一旦使用了流或迭代器,如果不重置它,就无法再次使用它。

Correct - one read to a customer. Once you use a stream or an iterator you can't use it again without resetting it.

苦笑流年记忆 2024-10-28 04:00:12

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

如果您需要查看,请使用 Java NIO选择器 可以告诉您是否有任何通道已准备好数据。

InputStream doesn't allow to "peek" at the next character; instead, all read methods block until data is available.

If you need peeking, use Java NIO. A Selector can tell you if any channel has data ready.

極樂鬼 2024-10-28 04:00:12

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

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

接下来的读取将重新读取该字符

You could wrap you stream in a PushbackInputStream. Then you could do this:

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

and a following read will re-read that character

污味仙女 2024-10-28 04:00:12

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

This example uses mark() and reset() to re-read the input stream, but it relies on a priori knowledge of a suitable readlimit. Depending on your needs, it may be a useable buffer strategy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文