在继续之前,请从BufferedReader读取所有行

时间:2014-01-30 00:25:09

标签: android bufferedreader stringbuilder

我的应用程序存在一些问题。我通过套接字通过BufferedReader接收数据。我循环使用while ((sLine = reader.readLine ()) != null)并将sLine附加到StringBuilder对象。我还在构建器上花了一条新线。

计划是,一旦构建器全部完成,将调用String sTotal = builder.toString()并将总计传递给下一个例程。

然而,下一个例程是为每一行调用一次而不是整个字符串。例程调用在上面的循环之外,所以我真的不知道为什么!

希望有人能帮忙......

编辑:下面的代码摘录。

public void run() {
    try {
        oServerSocket = new ServerSocket(iPort);

        while ((!Thread.currentThread().isInterrupted()) && (!bStopThread)) {
            try {
                oSocket = oServerSocket.accept();
                this.brInput = new BufferedReader(new InputStreamReader(this.oSocket.getInputStream()));
                StringBuilder sbReadTotal = new StringBuilder();
                String sReadXML = "";
                while ((sReadXML = brInput.readLine()) != null) {
                    sbReadTotal.append("\n");
                    sbReadTotal.append(sReadXML);
                }
                sReadXML = sbReadTotal.toString();
                Log.d("XMLDATA", sReadXML);
                processXML(sReadXML);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    } catch (Exception e) {
        /* Nothing Yet */
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

如果您要退出内部while循环,则表示您已到达输入流的末尾(当readLine()返回null according to the docs时)。

您应该查看客户端,而不是服务器。什么在建立客户端套接字?您确定它没有为它发送的每一行建立单独的连接吗?