在 Java 中获取数据类型大小(sizeof)的最佳实践
我想将双精度和整数列表存储到 ByteBuffer,它要求分配大小。我想写一些类似C语法的东西
int size=numDouble*sizeof(double)+numInt*sizeof(int);
,但是Java中没有sizeof
。计算字节大小的最佳实践是什么?我应该对其进行硬编码吗?
I want store a list of doubles and ints to a ByteBuffer, which asks for a size to allocate. I'd like to write something like C's syntax
int size=numDouble*sizeof(double)+numInt*sizeof(int);
But there is no sizeof
in Java. What is the best practice to calculate the size in byte? Should I hardcode it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
请参阅下面的 @Frank Kusters 的回答 !
(我原来的答案是针对 Java 版本 < 8 的。)
See @Frank Kusters' answer, below!
(My original answer here was for Java versions < 8.)
从 Java 8 开始,所有基本类型的包装类(除了
Boolean
)都有一个BYTES
字段。因此,在您的情况下:文档:http://docs。 oracle.com/javase/8/docs/api/java/lang/Integer.html
Since Java 8, all wrapper classes of primitive types (except
Boolean
) have aBYTES
field. So in your case:Documentation: http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html
写你自己的方法。在 Java 中,数据类型与平台无关,且大小始终相同:
用法:
Write your own method. In Java the datatypes are platform independent always the same size:
Usage:
更好的解决方案可能是不模拟 C 语法,而是使用带有嵌套 ByteArrayOutputStream 的 ObjectOutputStream 来生成字节数组,然后将其写入 ByteBuffer。
A better solution might be to not emulate C syntax and use an ObjectOutputStream with a nested ByteArrayOutputStream to generate a byte array which can then be written to your ByteBuffer.
Java 中的大小始终相同。您可以对其进行硬编码,但只需要这样做,因为您正在处理 ByteBuffer 中的字节。如果您使用
double[]
或DoubleBuffer
,则不需要这些。The size in Java is always the same. You can hardcode it but you only need to do this because you are working with bytes in a ByteBuffer. If you use
double[]
orDoubleBuffer
you don't need these.您还可以使用 sizeof4j 库来获取您只需要的 double 的大小
SizeOf.doubleSize( )
You can also use the sizeof4j library to get the sizeof the double you just need
SizeOf.doubleSize()
自动化和抽象的解决方案是将样本写入 DataOutput 并查看结果的大小。
Automated and abstract solution is to write the sample to DataOutput and see the resulted size.