sirve setsize redimensionar que para interfaz grafica ejemplos componentes clase java sizeof

setsize - Las mejores prácticas para obtener el tamaño del tipo de datos(tamaño de) en Java



setsize java para que sirve (6)

Quiero almacenar una lista de dobles e ints en un ByteBuffer, que solicita un tamaño para asignar. Me gustaría escribir algo como la sintaxis de C

int size=numDouble*sizeof(double)+numInt*sizeof(int);

Pero no hay sizeof en Java. ¿Cuál es la mejor práctica para calcular el tamaño en bytes? ¿Debería codificarlo?


(Si estás usando Java 8 o más, ¡asegúrate de ver la respuesta de @Frank Kusters !)

Todos los envoltorios primitivos tienen una constante SIZE, que está en bits, no en bytes.

Así que en el ejemplo dado, sería:

int size=(numDouble*Double.SIZE+numInt*Integer.SIZE) / Byte.SIZE;

O, si querías evitar la división:

int size=numDouble*(Double.SIZE/Byte.SIZE)+numInt*(Integer.SIZE/Byte.SIZE);

(Debido a que la división es de dos constantes, se realiza en tiempo de compilación).



El tamaño en Java es siempre el mismo. Puede codificarlo pero solo necesita hacer esto porque está trabajando con bytes en un ByteBuffer. Si usa double[] o DoubleBuffer no necesita estos.


Escribe tu propio método. En Java, los tipos de datos son independientes de la plataforma siempre del mismo tamaño:

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) }

Uso:

int size = numDouble * sizeof(double.class) + numInt * sizeof(int.class);


También puede usar la biblioteca sizeof4j para obtener el tamaño del doble que solo necesita SizeOf.doubleSize()


Una solución mejor podría ser no emular la sintaxis de C y usar un ObjectOutputStream con un ByteArrayOutputStream anidado para generar una matriz de bytes que luego se puede escribir en su ByteBuffer.