如何从DatagramPacket中检索String

时间:2012-04-15 05:14:09

标签: java android udp bytearray

以下代码打印

[B@40545a60,[B@40545a60abc exp 

但我想打印abc,以便我可以从接收系统中检索正确的消息。

public class Operation {
InetAddress ip;
DatagramSocket dsock;
DatagramPacket pack1;
byte[] bin,bout;
WifyOperation(InetAddress Systemip)
{
    ip=Systemip;
    try {
        dsock=new DatagramSocket();

        } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

}

void sendbyte()
{
    String senddata="abc"; 
    bout=senddata.getBytes();
    pack1=new DatagramPacket(bout,bout.length,ip,3322);
    try {
        dsock.send(pack1);
        Log.d(pack1.getData().toString(),"abc exp");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

如何从数据包pack1中检索字符串而不是字节?

2 个答案:

答案 0 :(得分:1)

您可以尝试: String msg = new String(pack1.getData(), pack1.getOffset(), pack1.getLength());

答案 1 :(得分:0)

基于评论的新答案:

确实,我的旧回答是错误的。 更新:

String str = new String(
    pack1.getData(),
    pack1.getOffset(),
    pack1.getLength(),
    StandardCharsets.UTF_8 // or some other charset
);

旧回答:

做类似的事情:

byte[] data = pack1.getData();
InputStreamReader input = new InputStreamReader(
    new ByteArrayInputStream(data), Charset.forName("UTF-8"));

StringBuilder str = new StringBuilder();
for (int value; (value = input.read()) != -1; )
    str.append((char) value);

这假设字节数据代表(仅)UTF-8文本,可能不是这种情况。