1

以前の質問java-util-currency-getinstance-throwing-illegalargumentexceptionに続いて、 java.util.Currencyのソース コードを見ていました。

次のコード スニペットを見ました。

static {
  AccessController.doPrivileged(new PrivilegedAction() {
    public Object run() {
      String homeDir = System.getProperty("java.home");
      try {
        String dataFile = homeDir + File.separator +
        "lib" + File.separator + "currency.data";
        DataInputStream dis = new DataInputStream(
        new BufferedInputStream(
        new FileInputStream(dataFile)));
        if (dis.readInt() != MAGIC_NUMBER) {
          throw new InternalError("Currency data is possibly corrupted");
        }
        ....
        ....
        ....
        ....
        if (false) {
          // look for the properties file for overrides
          try {
            File propFile = new File(homeDir + File.separator +
            "lib" + File.separator +
            "currency.properties");
            //more code 

          }

内にそのようなファイルが見つからないため、currency.dataまたはの場所について疑問に思っていました。currency.propertiesC:\Program Files\Java\jre6\lib

rt.jar の下を見るとCurrencyData、いくつかのエントリを定義したクラス が表示されますが、それが とどのように関連しているかはわかりませんjava.util.Currency

public static Currency getInstance(String currencyCode) {}指定された通貨コードが ISO 4217 リストに含まれているかどうかを確認する方法を 調べていました。CurrencyData.propertiesこの情報を保存して渡すために使用されているファイルのように見える通貨データを最新の ISO 4217 規格に更新する

これについてさらに情報を得ることを願っています。現在、次の Java バージョンを使用しています。

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)
4

1 に答える 1

0

リンク先のソース コードは OpenJDK 6 ですが、Oracle Java 6 を使用しています。Oracle Java 6 のソース コードはこれらの通貨ファイルを参照しないため、インストールには存在しません。

OpenJDK は Oracle Java 7 から分岐していることに注意してください (クラス内のこれらのファイルを参照します)Currency。OpenJDK 6 は、Java 6 仕様に一致するまで OpenJDK 7 からコードを削除することによって作成されました (情報については、このリンクを参照してください)。明らかに、この特定のコードのチャンクは、バックポート後も生き残りました。

OpenJDK 6 をインストールすると、ファイルが見つかると思います。同様に、私の Oracle Java 7 インストールにもこれらのファイルがあります。

Oracle Java 6 は、通貨データを package-privatejava.util.CurrencyDataクラスに格納しているように見えることに注意してください。

于 2012-10-06T19:42:38.617 に答える