style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

The magic number 0xCAFEBABE

Hace poco me entere de la existencia de un número mágico que sirve para identificar archivos o protocolos, para el caso de Java sirve para identificar los formatos de los archivos .class, dicho número se puede observar al abrir el archivo .class con un editor hexadecimal y se podra observar algo asi:

Se dice que el propio James Gosling explico el origen de este número mágico:

"Soliamos ir a almorzar a un sitio llamado St Michael´s Alley. De acuerdo a una leyenda local, en el profundo y oscuro pasado, el grupo Grateful Dead solia tocar ahí, antes de que se hicieran famosos. Era un lugar bastante moderno que hacia honor al nombre de la banda (un lugar digno para morir). Cuando Jerry el lider de la banda murió colocaron un pequeño altar budista. Cuando íbamos ahi soliamos llamar al lugar "Cafe Dead". Alguién noto que era un número hexadecimal. Yo reimprovisaba el código del formato del archivo de clase y necesitaba unos numeros mágicos: uno para el archivo de objeto persistente y otro para las clases. Yo utilice CAFEDEAD para el archivo de objeto persistente, y buscando un patron en los primeros 4 digitos "CAFE", y una variante en los demás me vino a la mente BABE y lo use. En ese momento no parecia demasiado importante o destinado a ir a cualquier lado como al bote de basura de la historia. Así que CAFEBABE llego a ser el formato de archivo de clase y CAFEDEAD el formato de archivo de objeto persistente, pero con el tiempo el objeto persistente se fue junto con el uso de CAFEDEAD que fueron reamplazados por RMI."

El post original lo dejo aquí

Tambien dejo un video donde nos explican más acerca del formato de archivo de clase:

Let's make some 0xCAFEBABE

Un dato curioso que no muchos nos interrogariamos o percataríamos sobre su existencia.

Saludos.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">