首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中获取数据类型大小(Sizeof)的最佳实践

在Java中获取数据类型大小(Sizeof)的最佳实践
EN

Stack Overflow用户
提问于 2011-07-21 02:03:30
回答 7查看 66.2K关注 0票数 29

我想将双精度型和整型数的列表存储到一个ByteBuffer中,它会要求分配一个大小。我想写一些像C的语法

代码语言:javascript
复制
int size=numDouble*sizeof(double)+numInt*sizeof(int);

但是Java中没有sizeof。以字节为单位计算大小的最佳实践是什么?我应该硬编码它吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-21 14:34:22

请参阅下面的@Frank Kusters' answer

(我最初的回答是针对Java版本低于8的版本。)

票数 48
EN

Stack Overflow用户

发布于 2014-07-18 20:19:10

从Java8开始,所有原始类型的包装类(除了Boolean)都有一个BYTES字段。所以在你的例子中:

代码语言:javascript
复制
int size = numDouble * Double.BYTES + numInt * Integer.BYTES;

文档:http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html

票数 36
EN

Stack Overflow用户

发布于 2011-07-21 02:08:33

编写您自己的方法。在Java中,数据类型是独立于平台的,大小总是相同的:

代码语言:javascript
复制
public static int sizeof(Class dataType)
{
    if (dataType == null) throw new NullPointerException();

    if (dataType == int.class    || dataType == Integer.class)   return 4;
    if (dataType == short.class  || dataType == Short.class)     return 2;
    if (dataType == byte.class   || dataType == Byte.class)      return 1;
    if (dataType == char.class   || dataType == Character.class) return 2;
    if (dataType == long.class   || dataType == Long.class)      return 8;
    if (dataType == float.class  || dataType == Float.class)     return 4;
    if (dataType == double.class || dataType == Double.class)    return 8;

    return 4; // 32-bit memory pointer... 
              // (I'm not sure how this works on a 64-bit OS)
}

用法:

代码语言:javascript
复制
int size = numDouble * sizeof(double.class) + numInt * sizeof(int.class);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6766343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档