【问题标题】:Do some ascii characters take up more than 1 byte of memory?某些 ascii 字符是否占用超过 1 个字节的内存?
【发布时间】:2020-09-11 14:07:57
【问题描述】:

我有一段这样的代码:

String a="10100101010101001010101001....."
for(int i=0;i<a.length()-8;i+=8){
            String k=a.substring(i,i+8);
            int num=Integer.parseInt(k,2);
            char o=(char)(num);
            out.print(o);//print to file
}

基本上,我们在收到二进制字符串后将 ascii 字符打印到 txt 文件中。 此循环运行的次数和打印的字符数约为 1100。 然而,检查这个 txt 文件的文件大小,它大约是 1700 字节。这有什么意义,为什么会发生这种情况? 但是,如果我尝试将字符打印到“正常”(az、0-9 等)的 txt 文件中。它似乎占用与字符相同的字节数(1 字节 = 1 ascii 字符 = 8 位)。

不知何故,当我打印那些“奇怪”的 ascii 字符时,会使用更多的内存。有没有办法解决这个问题? (准确打印字符数)

【问题讨论】:

  • Java Strings 并且字符不保存在 ASCII 中。它们以 UTF-16 格式保存,OutputWriter 也使用 UTF 编码,不一定是 ASCII。必须了解您的平台以及如何构建out 才能更精确..

标签: java file memory text binary


【解决方案1】:

ASCII 字符仅占用 1 个字节,除非您使用 UTF-16UTF-32 之类的编码,但这种情况非常罕见。

然而,ASCII 只定义字符 0-127。上面的任何东西都不是 ASCII,而是 Unicode(或 Extended ASCII,但这就像 100 多种不同的“标准”)。

如果 128 及以上的字符使用多个字节,您似乎将文件编码为 UTF-8,这通常是个好主意。

如果你只使用例如西拉丁字符,您也可以将文件编码为ISO-8859-1/Windows-1252,这将使所有字符仅使用1个字节,但任何不支持的字符将转换为?

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多