【问题标题】:Java client server chat pads strings with squares when converting to byte[]转换为 byte[] 时,Java 客户端服务器聊天用正方形填充字符串
【发布时间】:2012-10-29 02:59:48
【问题描述】:

我正在构建一个聊天客户端和服务器作为课程项目的一部分,但遇到了一个我似乎无法解决的问题。文本必须以固定大小byte[](32 或 64 字节)的形式传递,具体取决于具体情况。

当我使用.getBytes() 方法将字符串更改为byte[] 时,它会用空方块填充字符串的长度。这在运输和收货期间很好,但有时我需要将字符串更改为原始格式(目前使用 new String(byte[]) 完成并删除空方格。

我似乎找不到这样做的好方法。有什么建议吗?

客户端相关码位:

byte[] bigDataByte = new byte[64];
sendData[2] = (bigDataByte = message.getBytes())
for (int i = 0; i < sendData.length; i++){
    if (sendData[i] != null){
        DatagramPacket sendPacket = new DatagramPacket(sendData[i], sendData[i].length, IPAddress, clientPort);
        clientSocket.send(sendPacket);
    }
}

相关码位服务器端:

 String name = new String(getBytes(32));

 private static byte[] getBytes(int size) throws IOException {
    byte[] dataByte = new byte[size];
    DatagramPacket dataPacket = new DatagramPacket(dataByte, dataByte.length);
    servSocket.receive(dataPacket);
    return dataPacket.getData();
 }

【问题讨论】:

  • 你能只发布你的代码的相关部分吗?
  • 我想知道 .trim() 是否会起作用,它是如此简单,我没有想到它。这取决于空白方字符是否被视为空白。
  • 是的,它确实有效。抱歉,我早该想到的,只是没想到方块会是“空格”。

标签: java string bytearray


【解决方案1】:

不确定,但问题可能是您没有指定字符集。

尝试使用

例如

byte[] bytes = str.getBytes("UTF-8");

String str = new String(bytes, "UTF-8");

默认的使用平台的默认字符集,这可能会导致不匹配。

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2017-07-06
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多