Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接收不带'的JSON\0';_Java_Json - Fatal编程技术网

Java 接收不带'的JSON\0';

Java 接收不带'的JSON\0';,java,json,Java,Json,我必须将我的应用程序与现有(不可修改)Python脚本集成,该脚本发送JSON消息时不带“\0”或任何其他“消息结束”字符。有没有更好的方法来处理传入的消息,只需从套接字中一个字节接一个字节地读取数据并计算括号?在此应用程序中,由于协议原因,在消息内容中发送{或}是非法的,因此此代码工作正常,但在我看来很难看: int i = 0; int brackets = 0; byte[] msg = new byte[4096]; do { byte chunk =

我必须将我的应用程序与现有(不可修改)Python脚本集成,该脚本发送JSON消息时不带“\0”或任何其他“消息结束”字符。有没有更好的方法来处理传入的消息,只需从套接字中一个字节接一个字节地读取数据并计算括号?在此应用程序中,由于协议原因,在消息内容中发送
{
}
是非法的,因此此代码工作正常,但在我看来很难看:

  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个字节长。当我尝试一个字符接一个字符地接收数据时,我无法将它们与
{
}
进行比较,您可以使用库:


其中,
reader
是套接字读取器的输入流。

为什么要用字节数组处理文本?Python脚本如何“发送”JSON消息?我们需要更多的信息。@Yob还有,那个用计数括号的黑客根本不起作用。原因如下:
{a:1,b:'}}
@Yob抱歉,我错过了“不可修改”部分。好吧,至少这是一个教训。更“优雅”的是编写自己的真正的(-ish)JSON解析器,至少是一个处理字符串和嵌套对象的解析器。如果你没有时间的话,你可以调查一下吗?我似乎记得,该工具使构建快速递归下降解析器成为可能。@Yob根据您对Java中
char
大小的判断是正确的。它们将字符列为
16位Unicode字符
。Java在内部使用2字节字符,但要在这些字符和C样式的1字节字符字符串之间转换,通常应使用UTF8。
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));
...