我认为 java 中的字符是 16 位,如建议的那样java doc http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html。字符串不也是这样吗?我有一个将对象存储到文件中的代码:
public static void storeNormalObj(File outFile, Object obj) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(outFile);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
基本上,我尝试存储一个字符串"abcd"
到文件中"output"
,当我打开output
用编辑器删除掉无字符串部分,只剩下字符串“abcd”,总共4个字节。有人知道为什么吗?对于ASCII可以支持的字符串,java是否会自动使用ASCII而不是UNICODE来节省空间?谢谢
(我认为“无字符串部分”是指创建 ObjectOutputStream 时发出的字节。您可能不想使用 ObjectOutputStream,但我不知道您的要求。)
仅供参考,Unicode 和 UTF-8 不是一回事。 Unicode 是一个标准,除其他外,还指定了哪些字符可用。 UTF-8 是一种字符编码,指定如何将这些字符物理编码为 1 和 0。 UTF-8 可以使用 1 个字节表示 ASCII (
UTF-8 是 ASCII 的严格超集。因此,即使您为文件指定 UTF-8 编码并向其写入“abcd”,它也只会包含这四个字节:它们在 ASCII 中具有与 UTF-8 中相同的物理编码。
你的方法使用ObjectOutputStream
实际上,它的编码方式与 ASCII 或 UTF-8 明显不同!如果你仔细阅读 Javadoc,如果obj
是一个字符串并且已经出现在流中,后续调用writeObject
将导致发出对前一个字符串的引用,在重复字符串的情况下可能会导致写入的字节数减少很多。
如果您真的想了解这一点,您确实应该花大量时间阅读有关 Unicode 和字符编码系统的内容。维基百科有一篇关于Unicode http://en.wikipedia.org/wiki/Unicode作为一个开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)