writeUTF后的额外字符

时间:2015-05-17 15:52:20

标签: java android

我有一个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;。 不要理解为什么这么做......

2 个答案:

答案 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 方法有意添加了多余的字符。我不知道他们为什么添加这个。看起来对我没有用。可能造成的混乱比任何事情都多。