在 Java 中确定并打印文件大小

发布于 2024-11-18 09:12:55 字数 823 浏览 3 评论 0 原文

下面的方法返回文件大小为 2。由于它很长,我假设 java 计算的文件大小是 2*64 位。但实际上我保存了一个32位int + 一个16位char = 48位。为什么Java要进行这种转换呢?另外,Java 是否隐式地将所有内容存储在文件中,无论是 char 还是 int ?如何获得 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();  
            }

        }

The method below returns file size as 2. Since it is long, I'm assuming the file size java calculates is 2*64 bits. But actually I saved a 32 bit int + a 16 bit char = 48 bits. Why does Java do this conversion? Also, does Java implicitly store everything as long in the file no matter if char or int ? How do I get the accurate size of 48 bits ?

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();  
            }

        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

滴情不沾 2024-11-25 09:12:55

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

写入单个字符。

由于平台的默认字符编码将这两个字符存储为单个字节(每个),因此文件长度为 2(2 个字节:文件的长度以字节为单位,如文档所述)。使用文本编辑器打开该文件,然后查看其中的内容。

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

No. You wrote two characters. Writers are used for textual data, not for binary data. The documentation of write(int) says:

Writes a single character.

Since the default character encoding of your platform stores those two characters as a single byte (each), the file length is 2 (2 bytes: the length of a file is measured in bytes, as the documentation says). Open the file with a text editor, and see what's in there.

The Java API doc is really useful to know what a class or method does. You should read it.

可遇━不可求 2024-11-25 09:12:55

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

new PrintWriter(f)

使用默认字符集编码(系统上可能是 ASCII 或 UTF-8),因此会写入 2 个字节。

both calls to write are writing a char, which is 16 bits in memory, but since

new PrintWriter(f)

uses the default character set encoding (probably ASCII or UTF-8 on your system), it results in 2 bytes being written.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文