Números mágicos: CAFEBABE

Posted by: David Alayón

Ayer estábamos Kike y yo peleándonos por añadirle un JScrollPane a nuestro JTree y que éste se actualizase correctamente cuando le envíabamos el DefaultMutableTreeNode… vale… me callo…

El caso es que fuimos a preguntarle a un amigo, ex profesor de Java, próximo director de proyecto y lector de PisitoenMadrid quien, además de solucionarlos la duda en un momento y dejarnos una sensación de «somos muuuuy tontos«, me dijo una curiosidad sobre Java y los números mágicos (magic numbers)

En programación, un «magic number» es una constante numérica usada para identificar que tipo de dato se está usando. Por supuesto no sólo se usan en tipos de datos sino también en protocolos y ficheros. ¿Cómo identifica el Sistema Operativo qué tipo de fichero es un cierto archivo? Pues además de las extensiones, información nada relevante en Unix, el Sistema Operativo usa los «magic numbers» para saber el tipo de un archivo.

Los números mágicos están compuestos por dos bytes que contienen un número en Hexadecimal y la mayoría son muy típicos y aburridos:

  • GIF: es ‘GIF89a’ (0x474946383961) o ‘GIF87a’ (0x474946383761)
  • Zip: es ‘PK’, las iniciales de Phil Katz, creador de la utilidad de DOS PKZIP.
  • MIDI: ‘MThd’ (0x4D546864)
  • TIFF: ‘II’ (para Intel o little endian) o «MM» (para Motorola o big endian)

Luego hay otros más curiosos y simpáticos como los ejecutables de la Game Boy y Game Boy Advance cuyo número mágico codifica el bitmap del logo de Nintendo; o los antiguos archivos binarios para procesadores PowerPC en los Mac OS que contenían ‘Joy!’ (0x4A6F7921).

Pero Sun en un alarde de originalidad y supongo que para poder identificar perfectamente sus bytecodes, clases Java «compiladas», sin tener que realizar la conversión de hexadecimal o aprenderse una ristra de números y letras, puso como código hexadecimal 0xCAFEBABE… ¡CAFEBABE!

La verdad es que nadie sabe en concreto el por qué, o por lo menos no lo he encontrado. Lo más probable es que lo hayan pensado tanto por lo práctico como por la coña. Curioso que el símbolo de java sea una taza de café…

  1. n.l
    n.l
    at /

    En un dialecto de inglés, java quiere decir café.

    El ponerle Java al proyecto vino de James gosling, Arthur Van hoff, Andy bechtolsheim (se les ocurrió en una cafetería)

  2. meneame.net
    meneame.net
    at /
  3. DdS
    DdS
    at /

    Que yo sepa lo de Java viene por la isla de Java (Indonesia) y su famoso café (de ahí la taza). Pruebas:

    http://en.wikipedia.org/wiki/Java_coffee (ver trivia)

    ¿Un dialecto del inglés? Parece que te lo hayas inventado, n.l…

  4. cocomiel
    cocomiel
    at /

    afecta en algo el endian?.

  5. Semana: 4-10 Junio 2007 at Pisito en Madrid
    Semana: 4-10 Junio 2007 at Pisito en Madrid
    at /
  6. Carlicos
    Carlicos
    at /

    Segun tengo entendido ( leyenda o no) la palabra java es usada para denominar coloquialmente al cafe , sobre todo entre los programadores.
    Y le pusieron ese nombre debido a la gran cantidad de cafe que tomaban sus creadores.

Los comentarios están cerrados.