2012-09-01 9 views
5

Mam plik klasy i kiedy jestem na stronie internetowej następujący komunikat pochodzi:Niezgodny wartość magia 1768713317 w klasie pliku

Niezgodna wartość magiczną 1768713317 w pliku klasy „widmo”.

Co oznacza ta wartość magiczna? Proszę o pomoc :)

+0

Gdzie to znalazłeś? –

+0

jesteś na jakiej stronie? co robi plik klasy na stronie? – gefei

+0

Strona nie jest w tej chwili publicznie dostępna. Czy mogę wysłać wiadomość e-mail z adresem URL? – narf

Odpowiedz

10

Pierwsze cztery bajty .class pliku binarnego (skompilowany Java) powinny być 0xCAFEBABE - tzw wartość magiczną.

W twoim przypadku to 1768713317 lub 0x696C6C65 lub "ille" (ille ... gal?) W formacie ASCII. Najprawdopodobniej JVM próbuje otworzyć plik myśląc, że jest to kod bajtowy, podczas gdy w rzeczywistości jest to plik tekstowy. Być może klasa miała zostać pobrana, ale serwer zwrócił błąd?

+0

Przepraszamy za to pytanie, ale co znaczy ille? Gdzie muszę dodać magiczną wartość? – narf

+0

@narf: Oznacza to, że niektóre JVM próbuje załadować klasę, która nie jest naprawdę skompilowaną Javą, ale prawdopodobnie jakiś plik tekstowy. Jeśli zrobisz zdjęcie JPG i zmienisz jego rozszerzenie na .EXE, najprawdopodobniej dostaniesz też jakiś błąd. Przepraszamy, ale Twoje pytanie jest zbyt nieprecyzyjne. Czy możesz podać więcej szczegółów? –

5

Magiczna liczba to pierwsze 4 bajty w każdej skompilowanej klasie Java. Jest to struktura skompilowane klasy Java:

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” zawsze powinna być równa: 0xCAFEBABE. Mówi JVM: "Hej ty! Jestem klasą Java, możesz wykonać mój kod!". Gdy JVM odczyta plik, a numer magiczny nie jest prawidłowy, nie wykona go.

+0

Co to jest polecenie uzyskania tego wyjścia? – Reimeus

+0

To nie jest wyjście. Ta struktura została zaczerpnięta ze specyfikacji JVM: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.1 –

+0

Dzięki za to - +1 btw :) – Reimeus

Powiązane problemy