首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阅读从InputStream -卡住在循环

阅读从InputStream -卡住在循环
EN

Stack Overflow用户
提问于 2015-04-10 20:40:38
回答 1查看 296关注 0票数 0

我有一段代码:

(此代码位于另一个循环中,即循环3次)

代码语言:javascript
运行
复制
            ...
            text = "";
            while((c = is.read())!=-1){ 
                if(prev == '\r' && c == '\n'){
                    break;
                }
                text = text + (char) c;  
                prev = (char) c;
            }
            System.out.println(text);
            ...

is是InputStream,c是int,prev是char

使用这段代码,我从InputStream构建了一个字符串。每次我得到\r\n的时候,阅读都应该停止。然后它又开始了。一切都很好,除了一件事。我看到的溪流是这样的:

1233\r\n544\r\nX

在这个输入流之后,没有任何数据显示。

这样,我从第一个周期得到字符串1233,从第二个周期得到字符串544。但是我不会得到最后一个X,因为循环不会停止--我也不知道为什么。我认为使用is.read()=!-1,当流结束时,循环应该停止。但事实并非如此。程序被困在这个循环中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 21:09:31

你的问题还不清楚,但如下所述:

代码语言:javascript
运行
复制
while( ( c = is.read() ) != -1 )
{ 
    if(prev == '\r' && c == '\n')
    {
        break;
    }
    text = text + (char) c;  
    prev = (char) c;
}

注意执行顺序。检查\r\n和退出循环,然后将当前字符附加到text中。

你觉得这个逻辑有什么问题吗?

你还说过

当流结束时,循环应该停止。但事实并非如此。程序被困在这个循环中。

如果最后两个字节从来不是\r\n,或者如果流从未关闭,那么它将永远不会结束,并且它将以任何方式丢弃最后一个\n

那么,循环永远不会结束还是\n永远不会被追加呢?

如果希望在检测到的流的末尾结束循环,则需要重新排序您的逻辑。

垃圾中的垃圾:

假设\r\n对实际上存在于InputStream__中。你确定它们在那里吗?,步骤调试肯定会告诉你!

代码语言:javascript
运行
复制
public static void main(final String[] args)
{
    final InputStream is = System.in;
    final StringBuilder sb = new StringBuilder(1024);
    try
    {
        int i;
        while ((i = is.read()) >= 0)
        {
            sb.append((char)i);
            if (sb.substring(sb.length()-2).equals("\r\n"))
            {
                break;
            }
        }
    }
    catch (final IOException e)
    {
        throw new RuntimeException(e);
    }
    System.out.print(sb.toString());
}

您需要停止并学习如何使用IDE中的步骤调试器。这将不是一个问题,如果您只是通过您的代码,并放置了一些断点的事情不是您想要或预期的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29570310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档