java - 当数据不以新行结尾时,有没有办法从套接字中读取数据?

标签 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);
                    }
                }

             }

最佳答案

你用“}}”尝试的事情注定会失败,因为你将它与一个字符进行比较,而“}}”是两个字符。

我想更可靠的方法是计算左括号并将其与右括号匹配。

像这样:

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
      }
   }

关于java - 当数据不以新行结尾时,有没有办法从套接字中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330923/

相关文章:

java - 带有注释参数的私有(private)方法的 Android java.lang.VerifyError

java - 将成员作为参数传递给新线程时的局部变量引用和 GC

android - 在 Eclipse 中重新定位 AndroidManifest.xml 对 ADT 插件的支持的可能性

javascript - Angular Js 绑定(bind)带有带有静态索引的 JSON 数组的文本框

java - SetSize() 无法正常工作 : selenium + java

java - MessageDrivenBean 中的 Finalize 方法

php - 我如何解析json数组?

Android GridView 元素在行中重叠

ios - 如何将 JSON 数据保存到 iPhone

java - 使用 BlueMix 尝试将 JSON 数据插入 Cloudant 数据库,而无需在 Java 中对文件格式进行硬编码