2

下面的方法返回文件大小为 2。由于它很长,我假设 java 计算的文件大小是 2*64 位。但实际上我保存了 32 位 int + 16 位 char = 48 位。Java 为什么要进行这种转换?此外,无论是 char 还是 int,Java 是否都会将所有内容都隐式存储在文件中?如何获得 48 位的准确大小?

public static void main(String[] args)
        {
            File f = new File("C:/sam.txt");
            int a= 42;
            char c= '.';
            try {
                try {
                    f.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();  
                }
                PrintWriter pw = new PrintWriter(f);
                pw.write(a);
                pw.write(c);
                pw.close();
                System.out.println("file size:"+f.length());
            } catch (FileNotFoundException e) {
                e.printStackTrace();  
            }

        }
4

2 回答 2

5

不,你写了两个字符。写入器用于文本数据,而不是二进制数据。write(int)的文档说:

写入单个字符。

由于您平台的默认字符编码将这两个字符存储为单个字节(每个),因此文件长度为 2(2 个字节:文件的长度以字节为单位,如文档所述)。用文本编辑器打开文件,看看里面有什么。

Java API 文档对于了解类或方法的作用非常有用。你应该阅读它。

于 2011-07-05T20:11:37.343 回答
1

两个 write 调用都在写入一个 char,它在内存中是 16 位,但是因为

new PrintWriter(f)

使用默认字符集编码(在您的系统上可能是 ASCII 或 UTF-8),它会导致写入 2 个字节。

于 2011-07-05T20:16:32.630 回答