2012-09-01 12 views
5

Tengo un archivo de clase y cuando estoy en el sitio web el siguiente mensaje viene:valor mágico incompatible 1768713317 en el archivo de clase

valor mágico incompatible 1768713317 en el archivo de clase "espectro".

¿Qué significa este valor mágico? Por favor ayuda :)

+0

¿Dónde lo encontraste? –

+0

estás en qué sitio web? ¿Qué hace el archivo de clase en el sitio web? – gefei

+0

El sitio web no es público en este momento. ¿Puedo enviarte un correo electrónico con la url? – narf

Respuesta

10

Los primeros cuatro bytes de .class archivo (binario compilado de Java) debe ser 0xCAFEBABE - llamado así valor mágico.

En su caso estos son 1768713317 o 0x696C6C65 o "ille" (ille ... gal?) En ASCII. Lo más probable es que algunas JVM intenten abrir un archivo pensando que esto es bytecode, mientras que en realidad es un archivo de texto. Tal vez se suponía que la clase debía ser descargada pero el servidor devuelve algún error.

+0

Perdón por esa pregunta, pero ¿qué significa ille? ¿Dónde tengo que agregar el valor mágico? – narf

+0

@narf: Significa que algunas JVM intentan cargar una clase que no está realmente compilada en Java, pero probablemente en algún archivo de texto. Si tomas una imagen JPG y cambias su extensión a .EXE, lo más probable es que obtengas algún tipo de error. Lo sentimos, pero su pregunta es demasiado vaga, ¿puede proporcionar más detalles? –

5

Número mágico son los primeros 4 bytes en cada clase Java compilada. Esta es la estructura de una clase Java compilado:

ClassFile { 
    u4    magic; 
    u2    minor_version; 
    u2    major_version; 
    u2    constant_pool_count; 
    cp_info  constant_pool[constant_pool_count-1]; 
    u2    access_flags; 
    u2    this_class; 
    u2    super_class; 
    u2    interfaces_count; 
    u2    interfaces[interfaces_count]; 
    u2    fields_count; 
    field_info  fields[fields_count]; 
    u2    methods_count; 
    method_info methods[methods_count]; 
    u2    attributes_count; 
    attribute_info attributes[attributes_count]; 
} 

'magia' debe ser siempre igual a: 0xCAFEBABE. Le dice a la JVM: "¡Oye tú! ¡Soy una clase de Java, puedes ejecutar mi código!". Cuando JVM lee un archivo y el número mágico no es válido, no lo ejecutará.

+0

¿Cuál es el comando para obtener esta salida? – Reimeus

+0

Esa no es la salida. Esta estructura fue tomada de la especificación de JVM: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.1 –

+0

Gracias por esto - +1 por cierto :) – Reimeus

Cuestiones relacionadas