我有一个应用程序,获得ftp磁盘空间。所以由一个数字给出的空间表示多少字节。Java分析字节数超过39.4 GB的长变量错误
问题是当我得到超过39.4 GB的空间时,我只能在长或双变量中存储39.4 * 1024 * 1024 * 1024。所以如果你有50 GB,它只显示你39.4。最新的解决方案?
我有一个应用程序,获得ftp磁盘空间。所以由一个数字给出的空间表示多少字节。Java分析字节数超过39.4 GB的长变量错误
问题是当我得到超过39.4 GB的空间时,我只能在长或双变量中存储39.4 * 1024 * 1024 * 1024。所以如果你有50 GB,它只显示你39.4。最新的解决方案?
看看BigInteger的类可以帮助你解决问题
http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html
编辑:
其实前面已经提到别人,长期价值将能够保持一个非常大的价值,它可以容纳远超过40GB为一个数字值,
这里是用于存储的量大于39.4 GB溶液:
final long kb = 1024L;
final long mb = 1024L*kb;
final long gb = 1024L*mb;
long solution = 42L * gb; // > 39.4 GB in a long
long
can store much larger values - 所以你的代码中必须有特定的东西。我猜到了你的代码做什么,看看这个看起来很熟悉:
class Out {
public static void main(String args[]) {
long l = 40L * 1024 * 1024 * 1024;
double d = 40.0 * 1024 * 1024 * 1024;
System.out.println("long l: " + l + " double d: " + d + "\n");
return;
}
}
$ vim Out.java ; javac Out.java ; java Out
long l: 42949672960 double d: 4.294967296E10
注意,我不得不乘40L
而不仅仅是40
- 如果所有整数给出字面整数,没有具体的L
long
注解,那么Java会将整个表达式解释为int
。当有和没有L
测试(和刚刚1024 * 1024 * 102
相乘,建立以证实我的假设),我发现不同娱乐:
$ vim Out.java ; javac Out.java ; java Out # with only '40'
long l: -16777216 double d: 4.294967296E10
$ vim Out.java ; javac Out.java ; java Out # with '40L'
long l: 4278190080 double d: 4.294967296E10
我希望这有助于解释为什么到指定类型的文字是很重要的代码中的数据类型。
long
可以录制8 EXA-字节,这是8 * 1024 * 1024 * 1024 GB(减去一个字节;)
我很抱歉地说,我不明白你的问题。你能否粘贴你的代码,它的输出以及你期望它的输出是什么?谢谢 – sarnold 2011-05-11 22:56:44
我解释得更好。 – ShirazITCo 2011-05-11 23:02:36
你一定在做错事。在很长一段时间内,您可能可以存储的大小最多可达2^33或160亿Gigabytes – Ingo 2011-05-11 23:03:27