2

「\0」やその他の「メッセージの終わり」文字なしで JSON メッセージを送信する既存の (変更不可の) Python スクリプトとアプリケーションを統合する必要があります。バイトごとにソケットバイトからデータを読み取り、ブラケットをカウントするだけの受信メッセージを処理するより良い方法はありますか? このアプリケーションでは、送信{または}メッセージの内容はプロトコルのために違法であるため、このコードは正常に動作しますが、私には醜いようです:

  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))

このスクリプトは各文字を 1 バイトとして送信し、私の知る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 に答える