Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

C# и Java   Найти похожие ветки 

 
M234   (2005-01-25 12:46) [0]

Даа. Дела творяться. Прешел сейчас с Java на C#. Вот это средство с программирования с большой буквы. Все равно что с запорожца на на мерс пересесть. По всем статьям Java за пояс затыкает. Интересно сколько еще Java сможет продержаться? И как решится вопрос с C# для юниксовых систем?


 
Чеширский_Кот ©   (2005-01-25 12:48) [1]

а какую IDE используешь?


 
kirasukii   (2005-01-25 12:49) [2]

А интересно с java 1.5 сравнить. Помоему за .NET гонится.


 
iZEN ©   (2005-01-26 00:04) [3]

Что мне не нравится в C# - так это без документации невозможно узнать, какие исключения выбрасываются в методе скомпилированного класса...


 
iZEN ©   (2005-01-26 00:08) [4]

И ещё. C#-классы "летать" не могут. То есть в Java есть такое понятие как динамическая загруска кода из разных источников в процессе исполнения программы: когда код действительно понадобится, он может загружаться из какого-то удалённого источника, CODEBASE которого прописан в свойствах JRE. Например, это может быть не только диск, но и БД или LDAP, URL которого передаётся провайдеру доступа (Spi). Для .Net это НЕДОСТУПНО - нужно изобретать свои механизмы.


 
M234   (2005-01-26 08:06) [5]

У нет философия несколько иная, а следовательно и технология работы с ней будет отлична. Но другой не значит плохой, просто в Net вникнуть надо и мышление перекроить.


 
07BB:080Dh   (2005-01-26 08:19) [6]

iZEN ©   (26.01.05 00:08) [4]

не подскажеш где взять пример подключения програмно jar файла?
то есть прога запускается и из локальных папок подключает jar


 
iZEN ©   (2005-01-27 14:07) [7]

К 07BB:080Dh   (26.01.05 08:19) [6].
"Программное подключение Jar-файла" - это как?
jar - это контейнер для ресурсов и байткода. Например, чтобы использовать какой-либо класс, реализующий известный интерфейс (java.lang.Runnable, например) и запакованный в Jar на каком-то ресурсе, можно сделать так:
1) Прочитать Jar - в байтовый поток;
2) Распаковать в байтовый массив элемент с байткодом класса;
3) Инстанцировать класс из байткода в суперкласс (Class);
4) Инстанцировать объект из класса под известный интерфейс (Runnable) и "запустить" (вызвать известный метод интерфейса).
Пример.
package floresiris.demo;
/** "Летающий" класс */
public class FlyClass implements Runnable {
   public void run() {
       System.out.println("DONE!!!");
   }
}


import java.io.*;
import java.net.*;
import java.util.jar.*;
/** Запускатель */
public class FlyClassTest {
   public static void main(String[] args) {
       try {
           /* Читаем архив из ресурса */
           System.out.print("Read resource...");
           String urlresource = "file:/d:/Temp/demo.jar";
           URL url = new URL(urlresource);
           URLConnection con = url.openConnection();
           InputStream is = con.getInputStream();
           System.out.println("done.");
           /* Инстанцируем класс из потока */
           System.out.print("Instancing resource...");
           String className = "floresiris.demo.FlyClass";
           MyClassLoader loader = new MyClassLoader(is);
           Class c = loader.findClass(className);
           Runnable r = (Runnable)c.newInstance();
           System.out.println("done.");
           System.out.print("Running resource...");
           new Thread(r).start();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}
class MyClassLoader extends ClassLoader {
   private InputStream is;
   public MyClassLoader(InputStream is) {
       this.is = is;
   }
   public Class findClass(String name) {
       try {
           byte[] buffer = new byte[1000];
           int len = buffer.length;
           JarInputStream jis = new JarInputStream(is);
           JarEntry je = jis.getNextJarEntry();
           String name0 = je.getName();
           System.out.println("Элемент: " + name0);
           name0.replace("/", ".");
           int split = name0.indexOf(".class");
           name0 = name.substring(0, split);
           System.out.println("Новый Элемент: " + name0);
           if ((name0 != null) && name0.equals(name)) {
               /* Получаем массив байткода */
               len = jis.read(buffer);//Распаковали
               /* Отладочная информация - выводит байткод класса */
               for (int i = 0; i < len; i++) {
                   System.out.print(" " + buffer[i]);
                   if (i % 16 == 0) System.out.println();
               }
               System.out.println();
           }
           /* Возвращаем определимый класс */
           return defineClass(name, buffer, 0, len);
       } catch (Exception e) {
           e.printStackTrace();
       }
       return null;
   }
}

Конечно, навскидку код немного грязный, но оттолкнуться уже есть от чего.


 
iZEN ©   (2005-01-27 14:15) [8]

Вывод в консоли:
Read resource...done.
Instancing resource...Элемент: floresiris/demo/FlyClass.class
Новый Элемент: floresiris.demo.FlyClass
-54
-2 -70 -66 0 0 0 46 0 33 1 0 24 102 108 111 114
101 115 105 114 105 115 47 100 101 109 111 47 70 108 121 67
108 97 115 115 7 0 1 1 0 16 106 97 118 97 47 108
97 110 103 47 79 98 106 101 99 116 7 0 3 1 0 18
106 97 118 97 47 108 97 110 103 47 82 117 110 110 97 98
108 101 7 0 5 1 0 6 60 105 110 105 116 62 1 0
3 40 41 86 1 0 4 67 111 100 101 12 0 7 0 8
10 0 4 0 10 1 0 15 76 105 110 101 78 117 109 98
101 114 84 97 98 108 101 1 0 18 76 111 99 97 108 86
97 114 105 97 98 108 101 84 97 98 108 101 1 0 4 116
104 105 115 1 0 26 76 102 108 111 114 101 115 105 114 105
115 47 100 101 109 111 47 70 108 121 67 108 97 115 115 59
1 0 3 114 117 110 1 0 16 106 97 118 97 47 108 97
110 103 47 83 121 115 116 101 109 7 0 17 1 0 3 111
117 116 1 0 21 76 106 97 118 97 47 105 111 47 80 114
105 110 116 83 116 114 101 97 109 59 12 0 19 0 20 9
0 18 0 21 1 0 7 68 79 78 69 33 33 33 8 0
23 1 0 19 106 97 118 97 47 105 111 47 80 114 105 110
116 83 116 114 101 97 109 7 0 25 1 0 7 112 114 105
110 116 108 110 1 0 21 40 76 106 97 118 97 47 108 97
110 103 47 83 116 114 105 110 103 59 41 86 12 0 27 0
28 10 0 26 0 29 1 0 10 83 111 117 114 99 101 70
105 108 101 1 0 13 70 108 121 67 108 97 115 115 46 106
97 118 97 0 33 0 2 0 4 0 1 0 6 0 0 0
2 0 1 0 7 0 8 0 1 0 9 0 0 0 47 0
1 0 1 0 0 0 5 42 -73 0 11 -79 0 0 0 2
0 12 0 0 0 6 0 1 0 0 0 2 0 13 0 0
0 12 0 1 0 0 0 5 0 14 0 15 0 0 0 1
0 16 0 8 0 1 0 9 0 0 0 55 0 2 0 1
0 0 0 9 -78 0 22 18 24 -74 0 30 -79 0 0 0
2 0 12 0 0 0 10 0 2 0 0 0 4 0 8 0
5 0 13 0 0 0 12 0 1 0 0 0 9 0 14 0
15 0 0 0 1 0 31 0 0 0 2 0 32
done.
Running resource...DONE!!!


Основные моменты.
1) Класс FlyClass находится в отдельном архиве (в нашем случае в d:\Temp\demo.jar);
2) FlyClassTest находится в другом месте и знает:
* откуда можно загрузить  "Летающий класс";
* имя "Летающего класса";
* то, что FlyClass имплементирует интерфейс java.lang.Runnable. Всё. Про другие методы ему неизвестно (Если будет нужно, то методом рефлексии можно получить всю поднаготную класса).


 
wl ©   (2005-01-27 14:20) [9]

век живи, век учись...


 
Skier ©   (2005-01-27 14:22) [10]


> Интересно сколько еще Java сможет продержаться?

Долго.

> И как решится вопрос с C# для юниксовых систем?

Как напишут FrameWork для юниксовых систем так и решится (в основном). Но пока не вышел Longhorn думаю сильных изменений не будет...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
14-1107244946
Jaxtor
2005-02-01 11:02
2005.02.20
Запуск CGI приложения и обработка его результата


4-1104948164
suharew
2005-01-05 21:02
2005.02.20
Как переименовать каталог


1-1107761082
dreamse
2005-02-07 10:24
2005.02.20
Проблема с копированием директорий


1-1107241841
Gek1
2005-02-01 10:10
2005.02.20
Innerfuse Pascal Script


1-1107708424
focor
2005-02-06 19:47
2005.02.20
СЕРИЙНИК жесткого





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский