Scala 代码(如持续时间)的人类可读大小单位(文件大小)

Oni*_*iel 4 scala

是否有任何库为人类可读的文件大小单位(如Duration)提供具有隐式转换(从 Int、Long、Float)的对象/类。

有了Duration你可以这样做:

11.millis
1.5.minutes
10.hours
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一些图书馆可以让我这样做:

1.gibabyte
1024.megabytes
10.gibibytes
10.GB
50.GiB
Run Code Online (Sandbox Code Playgroud)

我知道我可以自己实现这个,但我不想重新发明轮子。

use*_*663 7

Squants 是一个很好的解决方案,特别是如果您需要的不仅仅是来自 lib 的人类可读的字节大小转换,但另一种可能性是使用从旧的 SO java 解决方案移植的这个简单的 4 行解决方案。你今天可能不需要ZB 和 YB,但可能在未来 ;)

  /**
    * @see /sf/ask/228472471/
    * @see https://en.wikipedia.org/wiki/Zettabyte
    * @param fileSize Up to Exabytes
    * @return
    */
  def humanReadableByteSize(fileSize: Long): String = {
    if(fileSize <= 0) return "0 B"
    // kilo, Mega, Giga, Tera, Peta, Exa, Zetta, Yotta
    val units: Array[String] = Array("B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
    val digitGroup: Int = (Math.log10(fileSize)/Math.log10(1024)).toInt
    f"${fileSize/Math.pow(1024, digitGroup)}%3.3f ${units(digitGroup)}"
  }
Run Code Online (Sandbox Code Playgroud)