代码之家  ›  专栏  ›  技术社区  ›  Kalle Richter

System.currentTimeMillis如何在短时间内返回不同长度的long?

  •  1
  • Kalle Richter  · 技术社区  · 6 年前

    我正在创建临时目录

    Files.createTempDirectory(String.format("project-it-screenshots-%d",
            System.currentTimeMillis())).toFile();
    

    我以为 long System.currentTimeMillis() 因为两个不同长度的返回值来自不同的世纪,所以它们的长度都是相同的。在每天多次调用该方法之后

    project-it-screenshots-15343380422205011345585140911467
    project-it-screenshots-15343381444485756307954062111474
    project-it-screenshots-15343386111604255833362898885857
    project-it-screenshots-15343388402055473274775132302475
    project-it-screenshots-1534338974370463603854456850155
    project-it-screenshots-15343390449093279576023746896269
    project-it-screenshots-15343398036346426501075034038757
    project-it-screenshots-15343399888498609875231360701639
    project-it-screenshots-15343401211515574289310135012571
    project-it-screenshots-15343405563586337945661543042110
    project-it-screenshots-15343419027757787065954653813302
    project-it-screenshots-15343425353682119990056938907868
    project-it-screenshots-15343429571018010152043055630277
    project-it-screenshots-15343431608662744493593200651167
    project-it-screenshots-15343436122094379676346949668973
    project-it-screenshots-15343442103124076542522856351947
    project-it-screenshots-15343539846818150078805796257638
    project-it-screenshots-15343555678106536264262565060437
    project-it-screenshots-15343809068582300780873443756155
    project-it-screenshots-15344378068483088975615680511653
    project-it-screenshots-15344421866441533761733546877922
    

    哪里 1534338974370463603854456850155 比其他数字短一位数。这似乎与剥夺领导权无关 0 0个 因为一些长度较大的数字有,而另一些没有。

    0个 用填充到数字 String.format 只会稍微改变时间戳)。

    1 回复  |  直到 6 年前
        1
  •  4
  •   rgettman    6 年前

    方法 System.currentTimeMillis() 返回 long ,最大长度只能为19位。但数字字符串的长度为31-32个字符。

    Files.createTempDirectory() 正在向文件名中添加其他字符。

    使用给定的 前缀 以生成其名称。

    (粗体强调我的)

    createTempDirectory(Path,String,FileAttribute[]) 方法指定dir参数为临时文件目录的情况。

    这种方法说明:

    如果希望名称是可预测的,则不能在中使用任何“createTemp”方法 Files . 如果后缀不在您的控制范围内,您可以选择如何创建前缀。但是使用 系统.当前时间毫秒() 不是路径名比另一个短的原因。它必须是未指定的实现。

    在Windows 10上,我得到了类似的结果。

    C:\Users\rgettman\AppData\Local\Temp\project-it-screenshots-15344437949188484678689730417470