Aug 13, 2011

Java Magic code

Class files are identified by the
following 4 byte header (in
hexadecimal): CA FE BA BE (the
first 4 entries in the below table).
The history of this magic number
was explained by James Gosling:
“We used to go to lunch at a
place called St Michael’s Alley.
According to local legend, in the
deep dark past, the Grateful Dead
used to perform there before
they made it big. It was a pretty
funky place that was definitely a
Grateful Dead Kinda Place. When
Jerry died, they even put up a
little Buddhist-esque shrine.
When we used to go there, we
referred to the place as Cafe
Dead. Somewhere along the line
it was noticed that this was a HEX
number. I was re-vamping some
file format code and needed a
couple of magic numbers: one
for the persistent object file, and
one for classes. I used CAFEDEAD
for the object file format, and in
grepping for 4 character hex
words that fit after “CAFE” (it
seemed to be a good theme) I hit
on BABE and decided to use it. At
that time, it didn’t seem terribly
important or destined to go
anywhere but the trash-can of
history. So CAFEBABE became the
class file format, and CAFEDEAD
was the persistent object format.
But the persistent object facility
went away, and along with it
went the use of CAFEDEAD – it
was eventually replaced by RMI.”
Magic Number: 0xCAFEBABE
Check out this program which
uses the Java’s Magic Number :
public class magicjava_parithi {
public static void main(String[] args) {
System.out.println(
Long.toHexString(0x100000000L + 0xcafeb
}
}
/*TRY PLAYING WITH PROGRAM BY REPLACING CAFEBABE WI
YOUR OWN WORD AND SEE WHAT HAPPENS */