以下代码打印
[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
中检索字符串而不是字节?
答案 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文本,可能不是这种情况。