为什么我的字符串不会通过套接字正确传播?

时间:2012-05-16 13:33:06

标签: java android sockets

05-16 14:29:16.935: W/System.err(20981): java.lang.NumberFormatException: 
    unable to parse '��������������������' as integer

这几乎是我的Android应用程序显示的错误消息,它应该接收一个10字节长的字符串(在错误消息中显示为20个不同的字节。

BufferedReader in = new BufferedReader(
        new InputStreamReader(client.getInputStream(), "UTF-8"));
BufferedWriter out = new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));

^^我添加了UTF-8。

String count = String.format("%10s", 
        (new Integer(result.length())).toString()).replace(" ", "0");

这是我获取我发送的字符串的方式,它正常工作,因为它在PC端日志中正确显示。

然而,在Android方面,它没有被正确接收。

BufferedReader in = new BufferedReader(
        new InputStreamReader(client.getInputStream(), "UTF-8"));
CharBuffer buf = CharBuffer.allocate(1024*1024);
in.read(buf);
char[] buffer = new char[10];
buf.get(buffer, 0, 10);
cont = Integer.parseInt(new String(buffer));

这是我获取字符串的方式,它似乎无法正常工作。有经验的人可以帮助我理解为什么这不起作用?

1 个答案:

答案 0 :(得分:3)

Java String是Unicode,每个char事务2个字节。很高兴知道。

您应该告诉流如何编码字符串。 UTF-8是我的推荐。

我建议您暂时忘记数字解析位,看看您是否能够理解来回发送的内容。不可读字符的例外情况无用。

将问题简化为简单的发送和接收,并记录收到的内容。可见性和透明度是您的朋友。在你知道自己得到什么之前,很难看到需要什么。