【问题标题】:java.util.Currency and ISO 4217 standardsjava.util.Currency 和 ISO 4217 标准
【发布时间】:2012-09-27 14:01:19
【问题描述】:

根据我之前的问题java-util-currency-getinstance-throwing-illegalargumentexception,我正在查看java.util.Currency的源代码

我看到了如下sn-p的代码:

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.datacurrency.properties 的位置,因为我在C:\Program Files\Java\jre6\lib 中找不到任何此类文件。

在查看 rt.jar 时,我可以看到一个类 CurrencyData,它定义了一些条目,但不确定它与 java.util.Currency 的关系。

我正在查看public static Currency getInstance(String currencyCode) {} 以了解它如何检查给定的货币代码是否在 ISO 4217 列表中。 CurrencyData.properties 看起来像是用于存储和传递此信息的文件Update currency data to the latest ISO 4217 standard

希望能获得更多有关这方面的信息。目前我正在使用以下 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)

【问题讨论】:

标签: java currency


【解决方案1】:

您链接到的源代码是 OpenJDK 6,但是您使用的是 Oracle Java 6。Oracle Java 6 的源代码不引用这些货币文件,因此它们不会出现在您的安装中。

请记住,OpenJDK 是从 Oracle Java 7 分支而来的(确实引用了 Currency 类中的这些文件)。 OpenJDK 6 是通过从 OpenJDK 7 中剥离代码创建的,直到它与 Java 6 规范匹配(请参阅this link for info)。很明显,这个特定的代码块在反向移植中幸存下来。

我怀疑如果你安装 OpenJDK 6,你会找到这些文件。同样,我的 Oracle Java 7 安装也有这些文件。

请注意,Oracle Java 6 似乎将货币数据存储在包私有 java.util.CurrencyData 类中。

【讨论】:

  • 我在查看我的 JDK rt.jar 并没有找到这样的属性。我想知道 Oracle 在哪里根据 ISO 保存有关货币代码信息的信息
  • @UmeshAwasthi 请参阅上面我编辑的答案中的最后一段。我建议您获取 Oracle 6 源代码并查看一下。
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多