2011-05-11 46 views
0

我有一个应用程序,获得ftp磁盘空间。所以由一个数字给出的空间表示多少字节。Java分析字节数超过39.4 GB的长变量错误

问题是当我得到超过39.4 GB的空间时,我只能在长或双变量中存储39.4 * 1024 * 1024 * 1024。所以如果你有50 GB,它只显示你39.4。最新的解决方案?

+0

我很抱歉地说,我不明白你的问题。你能否粘贴你的代码,它的输出以及你期望它的输出是什么?谢谢 – sarnold 2011-05-11 22:56:44

+0

我解释得更好。 – ShirazITCo 2011-05-11 23:02:36

+2

你一定在做错事。在很长一段时间内,您可能可以存储的大小最多可达2^33或160亿Gigabytes – Ingo 2011-05-11 23:03:27

回答

2

这里是用于存储的量大于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 
3

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 - 如果所有整数给出字面整数,没有具体的Llong注解,那么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 

我希望这有助于解释为什么到指定类型的文字是很重要的代码中的数据类型。

0

long可以录制8 EXA-字节,这是8 * 1024 * 1024 * 1024 GB(减去一个字节;)