我想知道java String和它的字节表示。我有一个用UTF-16小端编码的文件,当我在我的hexeditor中查看时我可以看到
ff fe 61 00 f3 00 61 00 00
现在,当我使用
将其加载到Java时 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-16"));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null)
builder.append(line);
System.out.println(Arrays.toString(builder.toString().getBytes()));
我可以在输出中看到
[97, -13, 97]
如果我打印字节,为什么我看不到我在hexeditor中看到的零值?
答案 0 :(得分:3)
这是因为Java不会将UTF-16格式的字符串保留在内存中,这会浪费,并且因为getBytes返回默认系统字符集中的字符串(在您的计算机上可能不是UTF-16){ {3}}。正确的重载是getBytes(“UTF-16”) - 这样你应该在结尾处看到0填充,并且可能在开头看到BOM(ff fe)。