我必须将我的应用程序与现有的(不可修改的)Python脚本集成,该脚本发送没有'\ 0'或任何其他“消息结束”字符的JSON消息。有没有更好的方法来处理仅在字节和计数括号后从套接字字节读取数据的传入消息?在此应用程序中,由于协议的原因,在邮件内容中发送{
或}
是非法的,因此此代码工作正常,但在我看来很难看:
int i = 0;
int brackets = 0;
byte[] msg = new byte[4096];
do
{
byte chunk = reader.readByte();
msg[i++] = chunk;
if (chunk == 123) // check if '{'
brackets++;
else if (chunk == 125) // check if '}'
brackets--;
} while ( brackets > 0);
byte[] finalMsg = Arrays.copyOfRange(msg, 0, i);
编辑 Python代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server_ip, server_port))
logging.info('Connected to: %s', (server_ip, server_port))
s.send(json.dumps(data))
logging.info('Sent message: %s', json.dumps(data))
我使用字节分析文本,因为这个脚本将每个字符作为单个字节发送,据我所知,char
在Java中长度为2个字节。当我尝试接收char-after-char数据时,我无法将它们与{
和}
进行比较。
答案 0 :(得分:1)
您可以使用Gson库:
Gson gson = new Gson();
JsonReader jr = new JsonReader(reader);
String msg1 = gson.toJson(gson.fromJson(jr, Object.class));
String msg2 = gson.toJson(gson.fromJson(jr, Object.class));
...
其中reader
是来自套接字读取器的输入流。