Pregunta

He estado programando en Java desde 2004, en su mayoría aplicaciones empresariales y web. Pero nunca he usado short o byte , aparte de un programa de juguetes solo para saber cómo funcionan estos tipos. Incluso en un for loop de 100 veces, usualmente vamos con int . Y no recuerdo si alguna vez me encontré con algún código que hiciera uso de byte o short , aparte de algunas API y marcos públicos.

Sí, lo sé, puede usar un short o byte para ahorrar memoria en matrices grandes, en situaciones donde el ahorro de memoria realmente importa. ¿A alguien le importa practicar eso? O simplemente es algo en los libros.

[Edited?

El uso de byte para la programación en red y la comunicación por socket es un uso bastante común. Gracias, Darren, por señalarlo. Ahora, ¿qué hay de corto ? Ryan, dio un excelente ejemplo. Gracias, Ryan.

¿Fue útil?

Solución

Tenga en cuenta que Java también se usa en dispositivos móviles, donde la memoria es mucho más limitada.

Otros consejos

Yo uso mucho el byte. Generalmente en forma de matrices de bytes o ByteBuffer, para comunicaciones de red de datos binarios.

Raramente uso float o double, y no creo que alguna vez haya usado short.

Usé mucho 'byte', en el código C / C ++ implementando funcionalidades como la compresión de imágenes (es decir, ejecutando un algoritmo de compresión sobre cada byte de un mapa de bits en blanco y negro), y procesando binarios mensajes de red (interpretando los bytes en el mensaje).

Sin embargo, virtualmente nunca he usado 'float' o 'double'.

El uso principal que he visto para ellos es mientras se procesan datos con una estructura desconocida o incluso sin estructura real. La programación en red es un ejemplo de lo primero (quien envía los datos sabe lo que significa, pero es posible que no lo sepa), algo así como la compresión de imágenes de imágenes de 256 colores (o escala de grises) es un ejemplo de esto último.

Fuera de la parte superior de mi cabeza, grep viene a la mente como otro uso, al igual que cualquier tipo de copia de archivo. (Claro, el sistema operativo lo hará, pero a veces eso no es lo suficientemente bueno).

El lenguaje Java en sí mismo dificulta enormemente el uso de los tipos byte o short . Cuando realice cualquier operación con un valor byte o short , Java lo promueve a un int primero, y el resultado de la operación se devuelve como un int . Además, están firmados y no hay equivalentes sin firmar, que es otra fuente frecuente de frustración.

Entonces, terminas usando mucho byte porque sigue siendo el componente básico de todas las cosas cibernéticas, pero el tipo short podría no existir.

Hasta hoy no he notado cuán rara vez los uso.

He usado el byte para cosas relacionadas con la red, pero la mayoría de las veces fueron para mis propias herramientas / aprendizaje. En proyectos de trabajo, estas cosas son manejadas por frameworks (JSP por ejemplo)

¿Corto? casi nunca.

¿Largo? Ninguno.

Mis literales enteros preferidos son siempre int, para bucles, contadores, etc.

Cuando los datos provienen de otro lugar (una base de datos, por ejemplo), uso el tipo apropiado, pero para los literales siempre uso int.

Utilizo bytes en muchos lugares diferentes, principalmente en el procesamiento de datos de bajo nivel. Desafortunadamente, los diseñadores del lenguaje Java hicieron bytes firmados. No puedo pensar en ninguna situación en la que tener valores de bytes negativos haya sido útil. Tener un rango de 0-255 hubiera sido mucho más útil.

No creo que haya usado pantalones cortos en ningún código apropiado. Tampoco uso nunca flotantes (si necesito valores de coma flotante, siempre uso dobles).

Estoy de acuerdo con Tom . Idealmente, en lenguajes de alto nivel no deberíamos preocuparnos por las representaciones de máquina subyacentes. Deberíamos poder definir nuestros propios rangos o utilizar números de precisión arbitrarios.

cuando programamos dispositivos electrónicos como teléfonos móviles, usamos byte y short. En este caso, debemos tener cuidado con la administración de la memoria.

Quizás sea más interesante observar la semántica de int. ¿Son esos límites arbitrarios y truncamiento silencioso lo que quieres? Para el código de nivel de aplicación realmente quiere enteros de tamaño arbitrario, es solo que Java no tiene forma de expresarlos razonablemente.

He usado bytes al guardar el Estado mientras realizo la verificación del modelo. En esa aplicación los ahorros de espacio valen el trabajo extra. De lo contrario, nunca los uso.

Descubrí que estaba usando variables de byte cuando hacía un procesamiento de imágenes de bajo nivel. Las rutinas de dibujo de .Net GDI + eran muy lentas, así que hice mi propio rollo.

La mayoría de las veces, sin embargo, me quedo con enteros con signo a menos que me vean obligado a usar algo más grande, dadas las limitaciones del problema. Cualquier tipo de modelado de física que haga generalmente requiere flotadores o dobles, incluso si no necesito la precisión.

PDI de Apache estaba usando short varias veces. Probablemente debido a la limitación del número de fila / columna de Excel.

Hace unos meses cambiaron a int reemplazando

createCell (short columnIndex )

con

createCell (int columna ) .

En las cuadrículas de datos en memoria, puede ser útil. El concepto de una cuadrícula de datos como Gemfire es tener un gran mapa distribuido. Cuando no tienes suficiente memoria, puedes desbordar al disco con la estrategia LRU, pero las claves de todas las entradas de tu mapa permanecen en la memoria (al menos con Gemfire).

Por lo tanto, es muy importante hacer sus claves con una huella pequeña, especialmente si está manejando conjuntos de datos muy grandes. Para el valor de entrada, cuando pueda, también es mejor usar el tipo adecuado con una pequeña huella de memoria ...

He usado cortos y bytes en aplicaciones Java que se comunican con usb o microcontroladores en serie para recibir valores de 10 bits envueltos en 2 bytes como cortos.

byte sy short s se usan ampliamente en el desarrollo de Java Card. Echa un vistazo a mi respuesta a ¿Existen usos de la vida real para el tipo primitivo de byte de Java? .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top