在java中这些数据类型的大小是固定的,所以根本不需要sizeof()函数。
int和float型的大小都是32bits。
至于对象的大小你也不用关心,在java中,对象的内存分配是自动的。

解决方案 »

  1.   

    to cherami:
    问题是:在我的一个类中有一个类成员(比如:一个MyMessage类中有一个MyMessageHeader类和buffer区),MyMessageHeader中定义了很多成员,然后MyMessage中有一个方法createMessage(int size),这个size是buffer的大小,我想在其它类调用这个方法时我自动加上MyMessageHeader类的大小,这样我就必须知道MyMessageHeader类的大小,同时我不想通过一个一个字节硬算出MyMessageHeader的大小,不知有何办法?
      

  2.   

    对象没有大小的概念,你可以将对象所有变量计算出来做为对象大小,
    对象里面可能含有引用,比如Vector和对象引用,Vector包含的只是对象集合的一个指引,
    完全计算对象大小不太实际
      

  3.   

    为什么要在其它类调用这个方法时加上MyMessageHeader的大小呢?缓冲区里面你想存什么?缓冲区大小和MyMessageHeader没有联系吧,你要把MyMessageHeader的内容存入缓冲区?
      

  4.   

    to cherami:
    是的,我想将buffer内容传给一个C++程序。
      

  5.   

    这样的话,一般的通常方法是实现类的toString方法,例如这样的类:
    class A {
    int a;
    float f;
    char c;
    public String toString() {
    StringBuffer temp=new StringBuffer(100);
    temp.append(a);
    temp.append(f);
    temp.append(c);
    return temp.toString();
    }
    }
    然后你可以使用String的length()方法得到大小或者直接将它转化为一个字节数组:
    A a=new A();
    byte b[]=a.toString().getBytes();
    这个方法的缺点就是数字的每一位都变成了一个char。
    然后你可以将b的内容加入缓冲区,但是在c++中你还得处理。这是必须的,java是平台无关的,而c++是平台相关的。你可以在toString()方法生成字符串的时候加入格式信息以方便c++的处理。
    这个方法你同样不需要知道数据的长度。
      

  6.   

    利用Java的反射类列举出给定的类的数据成员信息,包括类型,成员名,可以依此做一个通用方法取得该类对应的符合C标准的字节数组我写过这样的程序