java.util. Валюта и стандарты ISO 4217

Исходя из моего предыдущего вопроса /questions/12111956/javautilcurrencygetinstance-brosayuschij-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.properties так как я не могу найти такие файлы внутри C:\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)

1 ответ

Исходный код, на который вы ссылаетесь, - OpenJDK 6, однако вы используете Oracle Java 6. Исходный код для Oracle Java 6 не ссылается на эти файлы валют, поэтому они не будут присутствовать в вашей установке.

Имейте в виду, что OpenJDK разветвлен от Oracle Java 7 (который ссылается на эти файлы в Currency учебный класс). OpenJDK 6 был создан путем удаления кода из OpenJDK 7, пока он не соответствовал спецификации Java 6 (см. Эту ссылку для информации). Ясно, что этот конкретный кусок кода пережил резервный порт.

Я подозреваю, что если вы установите OpenJDK 6, вы найдете файлы. Точно так же моя установка Oracle Java 7 содержит эти файлы.

Обратите внимание, что Oracle Java 6, по-видимому, хранит данные валюты в частном пакете java.util.CurrencyData учебный класс.

Другие вопросы по тегам