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
учебный класс.