byte[] bys="我来了".getBytes();为什么要getBytes()
时间: 2024-03-04 21:54:03 浏览: 16
在Java中,字符串(String)是由Unicode字符组成的序列,而字节数组(byte[])是由二进制数据组成的序列。getBytes()方法可以将字符串转换为字节数组。具体来说,它将字符串中的每个字符转换为对应的字节,然后将这些字节组成一个字节数组。
在这个例子中,字符串"我来了"包含三个汉字和一个英文字母。当我们调用"我来了".getBytes()时,它将返回一个字节数组,其中包含这个字符串的二进制表示。具体来说,它将使用默认的字符编码(通常是UTF-8)将每个字符转换为一个或多个字节,然后将这些字节组成一个字节数组。
因此,byte[] bys="我来了".getBytes()将创建一个包含"我来了"字符串的二进制表示的字节数组。这个字节数组可以用于网络传输、文件读写、加密解密等操作,因为它是计算机可以理解的字节序列。
相关问题
byte[] bytes = original.getBytes();默认什么字符集
在 Java 中,如果没有指定字符集,则默认使用平台的默认字符集。这意味着,在不同的操作系统中,该行代码的行为可能会有所不同。因此,为了确保代码的可移植性,建议始终使用明确指定的字符集。例如,可以使用 "UTF-8" 字符集来编码字符串:byte[] bytes = original.getBytes("UTF-8");
优化一下这段代码 private void initConnectInfo() { byte_connectDDSTitle = connectDDSTitle.getBytes(); connectMessage = DDSUtil.geTopicInfo(); byte[] byte_connectMessage = connectMessage.getBytes(); int connectLength = byte_connectMessage.length; connectSubLength = 4+connectLength; connectLength = 4+ connectSubLength; byte_connectLength = intToBytes(connectLength); byte_connectSubLength = intToBytes(connectSubLength); byte_connectMessageId = intToBytes(connectMessageId); byte_connect = DDSUtil.mergeBytes(byte_connectDDSTitle,byte_connectLength,byte_connectSubLength,byte_connectMessageId,byte_connectMessage); Connect = connectDDSTitle+ new String(byte_connectLength)+new String(byte_connectSubLength)+new String(byte_connectMessageId)+connectMessage; System.out.println("客户端连接消息====="+Connect); }
可以考虑使用 StringBuilder 来优化字符串拼接,同时也可以将一些重复计算的部分提取出来,如下所示:
```
private void initConnectInfo() {
byte_connectDDSTitle = connectDDSTitle.getBytes();
connectMessage = DDSUtil.geTopicInfo();
byte[] byte_connectMessage = connectMessage.getBytes();
int connectMessageLength = byte_connectMessage.length;
connectSubLength = 4 + connectMessageLength;
byte_connectSubLength = intToBytes(connectSubLength);
byte_connectMessageId = intToBytes(connectMessageId);
byte_connectLength = intToBytes(connectSubLength + 4);
byte_connect = DDSUtil.mergeBytes(
byte_connectDDSTitle,
byte_connectLength,
byte_connectSubLength,
byte_connectMessageId,
byte_connectMessage
);
StringBuilder sb = new StringBuilder();
sb.append(connectDDSTitle)
.append(new String(byte_connectLength))
.append(new String(byte_connectSubLength))
.append(new String(byte_connectMessageId))
.append(connectMessage);
Connect = sb.toString();
System.out.println("客户端连接消息=====" + Connect);
}
```
其中,connectLength 这个变量被删掉了,因为它的计算结果已经不再使用到了。另外,byte_connectLength 和 byte_connectSubLength 的计算顺序调整了一下,因为 byte_connectLength 的计算需要用到 byte_connectSubLength。最后,使用 StringBuilder 来拼接字符串,避免了多次创建和销毁字符串对象的开销。