我有点问题。我一直致力于一个从传感器收集污染数据的应用程序。首先我通过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);
}
}
}
答案 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
}
}