2

我必须将我的应用程序与现有的(不可修改的)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 数据时,我无法将它们与{and进行比较}

4

1 回答 1

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来自套接字阅读器的输入流在哪里。

于 2012-10-17T18:01:47.403 回答