argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Саморазархивиращ се Java class файл ???  (Прочетена 1541 пъти)

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!

Преди време отнякъде ми беше попаднала програма, която се разпространяваше по много интересен начин - сваляш си .class файла, стартираш от командния ред и... класът започва да разархивира част от собствения си файл и на практика това е реалната програма, а .class файлът е бил само носителят!

Позачудих се малко как става този фокус и тъй като програмирам по-бързо отколкото мисля, за половин час съчиних ето това:

http://download.bgzin.com/SFX.class

Стартира се по следния начин: java SFX SFX.java. В текущата директория ще се саморазархивира сорс файлът (SFX.java, ~120 реда код), който на практика осъществява компресирането/декомпресирането и прикачването/отделянето към/от текущия .class файл.

И тъй като наистина пиша по-бързо отколкото мисля има един бъг, който сега нямам време да търся защо се получава, а именно:

Когато изпълня java SFX SFX.class (компресирам и добавям към .class файла самия него) и след това изпълня java SFX SFX.class.copy, новият файл (SFX.class.copy) се различава с няколко байта спрямо оригиналния. Това се случва само когато добавям SFX.class сам към себе си. Ако на някой му се занимава или пък му е интересно нека сподели защо се получава този бъг?
« Последна редакция: 12.06.2007, 15:28:04 от Иван Давидов »
Активен

EHA

  • Гост
Re: Саморазархивиращ се Java class файл ???
« Отговор #1 -: 21.06.2007, 12:15:36 »

Позачудих се малко как става този фокус и тъй като програмирам по-бързо отколкото мисля, за половин час съчиних ето това:
http://download.bgzin.com/SFX.class
Все пак да не забравяме, че програмирането е мисловен процес!
Активен

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!
Re: Саморазархивиращ се Java class файл ???
« Отговор #2 -: 21.06.2007, 13:39:29 »

Позачудих се малко как става този фокус и тъй като програмирам по-бързо отколкото мисля, за половин час съчиних ето това:
http://download.bgzin.com/SFX.class
Все пак да не забравяме, че програмирането е мисловен процес!

Честно казано вече от толкова време програмирам, че в комбинация с десетопръстната система на писане имам чувството, че понякога програмирам на автопилот...

Малко по темата:

За съжаление методът на декомпресиране от class файл има един неприятен дефект: целият клас трябва да се зареди в паметта, което автоматично означава, че не могат да се декомпресират файлове, които в компресиран вид са по-големи от определен размер. По-точно могат да се декомпресират, но трябва да се задават настройки от рода на -Xmx, което не е особено user friendly.

Алтернативате е създаването на JAR архив, който да извършва същата функционалност, но там също попаднах на интересен проблем: можеш да декомпресираш произволно голям файл, който се намира в рамките на JAR архива, но от същия JAR архив не можеш да добавяш компресирани файлове към него (поне така се държи на Windows XP, не съм го тествал на Linux), тъй като ОС се оплаква, че JAR файлът се използва от друг процес (процесът се казва java, който все пак трябва да има достъп до архива, за да стартира main класа).

Какъв е изводът: използвайте доказани архивиращи програми, не се занимавайте с глупости като мен!
Активен