2009-10-08 13 views
25

Además de usar (byte []) en la transmisión, realmente no veo el byte y el corto se usa mucho. Por otro lado, he visto el uso prolongado donde el valor real es | 100 | y byte sería más apropiado. ¿Es esto una consecuencia de la naturaleza relativamente barata de la memoria ahora o es solo una minucia de la que los desarrolladores no deben preocuparse?En Java, ¿alguien usa short o byte?

Respuesta

29

Se utilizan al programar dispositivos incrustados con poca memoria o espacio en disco. Tales como electrodomésticos y otros dispositivos electrónicos.

byte también se utiliza en la programación web bajo nivel, a la que envía solicitudes a los servidores web que utilizan cabeceras, etc.

+0

Es por eso que no los veo, nunca miro el código fuente de los electrodomésticos o los dispositivos electrónicos, saludos, pensándolo bien, esa fue la intención original de Java antes de que hiciera ondas en los applets y luego despegó . –

+0

pero, de nuevo, ¿no es Java demasiado lento y demasiado grande para los electrodomésticos? no es c/C++ la norma allí? –

+0

Es cierto que Java se usa menos en dispositivos integrados, pero aún bastante. Java ME es bastante pequeño y los procesadores ARM tienen un modo que puede ejecutar bytecode JVM directamente. Sin embargo, la recolección de basura no es predecible, por lo que la mayoría de las aplicaciones en tiempo real usarían programación de menor nivel. – mjaggard

1

Creo que en la mayoría de las aplicaciones cortas no tiene un significado de dominio, por lo que tiene más sentido usar Integer.

5

Me gustaría más a menudo utilizar las short y byte tipos cuando se trabaja con los formatos binarios y DataInput/DataOutput casos . Si la especificación dice que el siguiente valor es un valor de 8 bits o de 16 bits y que no hay ningún valor para promocionarlos a int (quizás sean indicadores de bits), son una opción obvia.

1

short y otros se utilizan a menudo para almacenar datos de imagen. Observe que es el número de bits que es realmente importante, no las propiedades aritméticas (que acaba de causa promoción a int o mejor.

short también se utiliza como índices de matriz en JavaCard (1.0 y 2.0, IIRC, pero no 3,0 que también tiene una pila HTTP y servicios web).

19

El tipo de datos byte se utiliza con frecuencia cuando se trata de datos en bruto de una conexión de archivos o de la red, aunque se utiliza sobre todo como byte[]. El short y short[] tipos se utilizan a menudo en conexión con GUI y procesamiento de imagen (para ubicaciones de píxeles & tamaños de imagen) y en procesamiento de sonido.

La razón principal para usar byte o short es una cuestión de claridad. El código del programa indica de forma no categorizada que solo se usarán 8 o 16 bits, y cuando accidentalmente usa un tipo más grande (sin un tipo de conversión apropiado) se obtiene un error de compilación. (Ciertamente, esto también podría verse como una molestia al escribir el código ... pero una vez más la presencia de los typecasts marca el hecho de que hay truncamiento sucediendo al lector.)

No logra ningún espacio guardando usando byte o short en variables simples en lugar de int, porque la mayoría de las implementaciones de Java alinean las variables de la pila y los miembros del objeto en los límites de las palabras. Sin embargo, los tipos de matriz primitiva se manejan de manera diferente; es decir, los elementos de las matrices boolean, byte, char y short están alineados por byte. Pero a menos que las matrices sean de gran tamaño o de gran número, no contribuyen significativamente al uso general de la memoria de la aplicación.

Así que supongo que la razón principal por la que los desarrolladores no usan byte o short tanto como usted (un desarrollador de C?) Podría esperar es que realmente no hace mucha (o a menudo ninguna) diferencia. Los desarrolladores de Java tienden a no obsesionarse con sobre el uso de memoria como lo hicieron los desarrolladores de C de la vieja escuela :-).

+0

Si trataras de obsesionarte con el uso de la memoria, creo que Java te volvería loco. Sin embargo, como un Java Dev, es bueno saber que estoy 'haciendo lo mío', así que siempre elijo el tipo más sucinto posible. No se trata solo de uso de memoria, se trata de claridad. –

+2

@ChrisHatton - Bueno, "tu parte" probablemente sea un esfuerzo desperdiciado (o nocivo) si te preocupa el uso y el rendimiento de la memoria. En serio, la micro-optimización no dirigida es * generalmente * un esfuerzo desperdiciado. Y ya mencioné el problema de claridad. –

12

En un procesador de 64 bits, los registros son todos de 64 bits, por lo que si su variable local está asignada a un registro y es booleana, byte, corta, char, int, flotante, doble o larga, no usa memoria y no guarda ningún recurso. Los objetos están alineados en 8 bytes, por lo que siempre ocupan un múltiplo de 8 bytes en la memoria. Esto significa Boolean, Byte, Short, Character, Integer, Long, Float y Double, AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference usan la misma cantidad de memoria.

Como se ha notado, los tipos cortos se usan para matrices y para leer/escribir formatos de datos. Incluso entonces corto no se usa muy a menudo en mi humilde opinión.

También vale la pena señalar que un GB cuesta alrededor de £ 80 en un servidor, por lo que un MB es de aproximadamente 8 peniques y una KB es de aproximadamente 0,008 peniques. La diferencia entre el byte y el largo es de aproximadamente 0.00006 peniques. Tu tiempo vale más que eso. especialmente si alguna vez tiene un error que resultó de tener un tipo de datos que era demasiado pequeño.

+0

Muy buen recordatorio sobre los límites. El cálculo también fue divertido, pero estoy bastante seguro de que int o long no se hicieron solo para evitar errores. Es más un hábito. –

3

Aritmética en byte sy short s es más incómodo que con int s. Por ejemplo, si b1 y b2 son dos variables byte, no puede escribir byte b3 = b1 + b2 para agregarlas. Esto es porque Java nunca hace aritmética internamente en nada más pequeño que un int, por lo que la expresión b1 + b2 tiene el tipo int aunque solo está agregando dos valores byte. En su lugar, tendría que escribir byte b3 = (byte) (b1 + b2).

+0

Estoy aprendiendo Java y esto es algo con lo que inicialmente tuve problemas. No pude entender por qué mi libro siempre usaba el tipo int. Por ejemplo, no tiene sentido para mí usar el tipo int para la cantidad de días en un mes. Así que lo cambiaría en mi código y luego me toparía con problemas. – Jeffpowrs

1

byte [] sucede todo el tiempo; búferes, específicamente para redes, archivos, gráficos, serialización, etc.

2

Utilicé short ampliamente al crear un emulador basado en una arquitectura de 16 bits. Consideré usar char para poder tener cosas sin firmar, pero el espíritu de usar un tipo de entero real ganó al final.

editar: con respecto a la inevitable pregunta sobre lo que hice cuando necesité la parte más significativa: con lo que emulaba casi nunca me acostumbraba. En los pocos lugares donde se usó, solo usé modificadores bit a bit o hacks de matemáticas.

0

La mayoría de las veces, nunca hay una razón técnica realmente buena para que un desarrollador (Java, C#, BASIC, etc.) decida por un int, corto o byte, cuando la capacidad es suficiente, por supuesto. Si el valor será menor de 2 mil millones, entonces int lo será.

¿Estás seguro de que tendremos personas mayores de 255? Bueno, nunca se sabe!

¿No son 32.767 posibles países suficientes? ¡No pienses demasiado pequeño!

En su ejemplo, puede estar perfectamente satisfecho con su byte var que contiene 100, si está absolutamente seguro de que NUNCA se desbordará. ¿Por qué los chicos usan int más? Porque porque.

Esta es una de esas cosas que la mayoría de nosotros simplemente hacemos porque lo vimos de esa manera la mayor parte del tiempo, y nunca preguntamos de manera diferente.

Por supuesto, no tengo nada en contra de "todas las cosas int". Solo prefiero usar el tipo correcto para cada tipo de valor, sin estrés.