「\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 と比較できませんでし}
た。