我想将双精度型和整型数的列表存储到一个ByteBuffer中,它会要求分配一个大小。我想写一些像C的语法
int size=numDouble*sizeof(double)+numInt*sizeof(int);
但是Java中没有sizeof
。以字节为单位计算大小的最佳实践是什么?我应该硬编码它吗?
发布于 2011-07-21 14:34:22
请参阅下面的@Frank Kusters' answer!
(我最初的回答是针对Java版本低于8的版本。)
发布于 2014-07-18 20:19:10
从Java8开始,所有原始类型的包装类(除了Boolean
)都有一个BYTES
字段。所以在你的例子中:
int size = numDouble * Double.BYTES + numInt * Integer.BYTES;
文档:http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html
发布于 2011-07-21 02:08:33
编写您自己的方法。在Java中,数据类型是独立于平台的,大小总是相同的:
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)
}
用法:
int size = numDouble * sizeof(double.class) + numInt * sizeof(int.class);
https://stackoverflow.com/questions/6766343
复制相似问题