我有点问题。我一直在开发一款从传感器收集污染数据的应用程序。首先我通过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/