Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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/字符串/字节转换操作(将字节发送到套接字)_Java_Android_Json_Sockets - Fatal编程技术网

Java Json/字符串/字节转换操作(将字节发送到套接字)

Java Json/字符串/字节转换操作(将字节发送到套接字),java,android,json,sockets,Java,Android,Json,Sockets,我在将JSON对象转换为字节时遇到问题。我需要像这样的东西: aJsonObject = new JSONObject(); // ...put somethin string msg; msg = aJsonObject.toString(); count = msg.countBytes(); //calculate how many bytes will string `msg` take 然后我需要将count转换为2元素字节数组,实际上我需要将16位int发送到socket,将ms

我在将JSON对象转换为字节时遇到问题。我需要像这样的东西:

aJsonObject = new JSONObject();
// ...put somethin
string msg;

msg = aJsonObject.toString();
count = msg.countBytes(); //calculate how many bytes will string `msg` take
然后我需要将count转换为2元素字节数组,实际上我需要将16位int发送到socket,将msg转换为count元素字节数组,将它们链接在一起并发送到TCP socket

对我来说,最复杂的是将计数精确地放在16位上

完全一样,我需要做相反的事情。获取2个字节,使其为int,然后从套接字读取int字节,并最终将其转换为json

如果有任何帮助,我将不胜感激。提前感谢。

Java字符串使用UTF-16编码。要将字符串转换为字节数组,只需调用String.getBytes方法,指定所需的字节编码,如UTF-8。然后读取数组的长度

要反转此过程,只需将字节传递给字符串构造函数,并指定相同的字节编码:

bytes[] bytes = ...;
String msg = new String(bytes, StandardCharsets.UTF_8);
// use msg as needed...

谢谢你的回答!字符串转换问题已解决。让int count正好放在2个字节上怎么样?@Pandita假设字节计数总是相同的,我觉得没那么简单。我的意思是我需要使int count成为16位大的uint16无符号整数。@Pandita我知道你想要什么。我所说的将有助于缩短播放时间并没有奏效,但我找到了解决方案:int count=bytes.length;字节[]数据=新字节[2];数据[0]=字节计数&0xFF;数据[1]=字节计数>>8&0xFF;然后我将其发送到ByteArrayOutputStream,将其与msg字节连接,并使用DataOutputStream.writebytearray发送整个字节数组。非常感谢你!
bytes[] bytes = ...;
String msg = new String(bytes, StandardCharsets.UTF_8);
// use msg as needed...