我有一个Android应用。它将数据发送到基于Java的程序。 Android代码:
Socket socket = new Socket(InetAddress.getByName("10.0.3.2"), 5555);
OutputStream sout = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(sout);
out.writeUTF(jsonLoginData.toString());
// IN jsonLoginData i put some values in another part of code
// jsonLoginData = new JSONObject();
// jsonLoginData.put("login",login);
// jsonLoginData.put("password",password);
out.flush();
out.close();
所以在另一方面,我有基于Java的proram,它正在收听5555端口并获取数据:
// var "s" is a socked listening 5555 port
InputStream is = s.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
String r = "";
StringBuilder content = new StringBuilder();
// read from the urlconnection via the bufferedreader
while ((line = bufferedReader.readLine()) != null)
{
r = r + line;
}
bufferedReader.close();
System.out.println("\n ==>" + r);
但问题是每次我在var" r"中都有额外的角色。 控制台告诉我:
==> <{"password":"6f3fa6ad89a459af8e1819c514059b3","login":"456"}
==> ={"password":"e516fac382793b462d6a19fa849db53a","login":"456"}
==> B{"password":"6f3fa6ad89a459af8e1819c514059b3","login":"456111414"}
正如你所看到的,在&#34; {...}&#34;喜欢&#34;&lt;&#34;之前有奇怪的符号。或&#34; =&#34;或&#34; B&#34;。 不要理解为什么这么做......
答案 0 :(得分:3)
不要使用DataOutputStream
。只需将您的字节写入OutputStream
。
OutputStream sout = socket.getOutputStream();
byte[] bytes = jsonLoginData.toString().getBytes("UTF-8");
sout.write(bytes);
答案 1 :(得分:0)
从文档网页: https://developer.android.com/reference/java/io/DataOutputStream#writeUTF(java.lang.String)
<块引用>首先,两个字节被写入输出流,就像 writeShort 方法给出要遵循的字节数。这个值是 实际写出的字节数,而不是长度 细绳。按照长度,输出字符串的每个字符, 按顺序,对字符使用修改后的 UTF-8 编码。
因此,writeUTF 方法有意添加了多余的字符。我不知道他们为什么添加这个。看起来对我没有用。可能造成的混乱比任何事情都多。