2012-01-15 6 views
1

Я хочу отправить данные класса по сети, и мне нужно получить двоичные данные в файлах .class от имени класса. Я хотел бы использовать загрузчик классов по умолчанию, а затем отправлять загруженные данные по сети. Как я могу это сделать? Я использую scala 2.9.0.1 и jre6Как получить двоичные данные из объекта класса [_]?

+0

Вы хотите отправить данные в своем экземпляре своего класса нашим байтовым кодом для самого класса? –

+0

Я использую удаленные актеры scala. После того, как соединение настроено, я отправляю экземпляр моего класса с сервера на клиент. И если при десериализации я не могу найти определение класса, я отправляю запрос на него на сервер. И проблема здесь, я не могу узнать, что отправить, если сервер упакован в файл jar. – laci37

ответ

4

RMI позволяет загружать файлы классов со всей сети. Скорее всего, это проще, чем опрокинуть собственное решение. Посмотрите на http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/codebase.html

+0

Все это настройка и работа, если я знаю путь к файлу .class. Но если я хочу упаковать его в банке, это терпит неудачу, потому что я не могу определить путь к файлам классов. – laci37

1

Замените периоды в имени полного класса разделителями файлов и добавьте «.class» в результат, это будет расположение файла .class в вашем пути к классам. Затем используйте ClassLoader для доступа к файлу в виде потока.

val location = className.replaceAll("\\.",File.separator) + ".class" 
val stream = ClassLoader.getSystemClassLoader().getResourceAsStream(location) 
//send the stream to your remote location 
+0

Это не похоже на файлы jar. – laci37

+0

Он должен забрать что-нибудь в вашем пути к классам, будь то в банке или нет. Если у вас возникли проблемы, я бы предположил, что проблема более вероятна в том, какой ClassLoader вы используете. Если вы пытались это сделать в классе с именем MyClass, попробуйте что-то вроде этого: MyClass.class.getClassLoader(). GetResourceAsStream (....) –

Смежные вопросы