2

以下のメソッドはファイルサイズを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();  
            }

        }
4

2 に答える 2

5

いいえ、あなたは 2 つの文字を書きました。ライターは、バイナリ データではなく、テキスト データに使用されます。write(int)のドキュメントには次のように書かれています。

1 文字を書き込みます。

プラットフォームのデフォルトの文字エンコーディングでは、これら 2 つの文字が 1 バイト (それぞれ) として格納されるため、ファイルの長さは 2 です (2 バイト: ファイルの長さは、ドキュメントに記載されているようにバイト単位で測定されます)。テキスト エディタでファイルを開き、その内容を確認します。

Java API doc は、クラスまたはメソッドが何をするかを知るのに非常に役立ちます。あなたはそれを読むべきです。

于 2011-07-05T20:11:37.343 に答える
1

write の両方の呼び出しは、メモリ内の 16 ビットである char を書き込んでいますが、

new PrintWriter(f)

デフォルトの文字セット エンコーディング (おそらくシステムでは ASCII または UTF-8) を使用すると、2 バイトが書き込まれます。

于 2011-07-05T20:16:32.630 に答える