2

以下代码打印

[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

4

2 回答 2

1

基于评论的新答案:

确实,我的旧答案是不正确的。更新:

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 文本,但情况可能并非如此。

于 2012-04-15T05:26:13.793 回答
1

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

于 2017-01-07T05:30:30.850 回答