当数据没有以新行结束时,有没有办法从套接字读取数据?

时间:2017-04-10 18:56:17

标签: java android json sockets client

我有点问题。我一直致力于一个从传感器收集污染数据的应用程序。首先我通过WiFi直接将手机连接到传感器,传感器是群组主机。但是,当我应该从套接字读取数据时,我遇到了问题。数据(即JSON)不以换行符结尾。所以我不能用

mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mServerMessage = mBufferIn.readLine();

因为它被卡住了。如何在没有新行的情况下读取数据?传感器每2分钟发送一次数据,因此每次发送数据时都需要返回一个新的字符串。有谁知道这个问题的解决方案?

编辑试过这个

                StringBuilder sb = new StringBuilder();

                String terminator = "}}";
                int c;

                while((c = mBufferIn.read()) != -1) {
                    char character = (char) c;

                    if (String.valueOf(character).contains(terminator)==false) {

                        sb.append(character);


                    } else {
                        mServerMessage = sb.toString();
                        sb=null;
                        mMessageListener.messageReceived(mServerMessage);
                    }
                }

             }

1 个答案:

答案 0 :(得分:1)

你试过的东西"}}"必然会失败,因为你将它与一个角色进行比较,并且"}}"是两个字符。

我想更可靠的方法是计算开括号并将其与结束括号进行匹配。

这样的事情:

private static final char OPEN = '{';
private static final char CLOSE = '}';

int openCount = 0;
int closeCount = 0;

... read the char and add to the string builder and then ...

   if(character == OPEN) {
      openCount++;
   } else if(character == CLOSE) {
      closeCount++;
      if(closeCount == openCount) {
          ... this means it's over, you can process the message
      }
   }