【发布时间】:2014-12-17 07:09:08
【问题描述】:
我想在消息中间编码一个原始字节:
byte SOH = 0x01;
String msg = "8=123" + SOH + "9=234";
System.out.println(msg); => 8=12319=234
这不是我想要的。我想要那里的原始字节!
【问题讨论】:
-
你明白String里面有一个字符数组,字符和字节不是一回事吧?
-
是的,但我想要简单的情况,一个字节 => 一个字符。
-
但是在 Java 中一个字节永远不是一个字符。一个字符总是两个字节。
-
其实我没看错(虽然你可能会说有些字符是四个字节而不是两个,但
char总是两个)。getBytes()没有做你认为的事情。但如果你认为你知道得更多,我会去帮助别人。 -
一个
String在内部存储为一个char[],其中每个char总是占用2个字节的内存。getBytes()不会给你这些字节的值。getBytes()为您提供String的byte[]编码,使用JVM 上的默认字符集*,通常取决于底层操作系统。例如,"€".getBytes()在 Mac 和 Windows 计算机上很可能会给出不同的结果,即使String在两者上的存储方式相同。 (*字符集基本上只是在char[]和byte[] 之间转换的一种方式)
标签: java string unicode binary byte