|
|
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Вот такая проблема: Есть BLOB поле где в массиве байтов хранится class файл Код: plaintext 1. 2. Если можно то идем дальше: Нужно чтобы этот массив байтов превратился в файл. Как сделать такое? Вот пишу говорит ошибка: Код: plaintext 1. 2. 3. И как можно из превращенного в File оъекта узнать название class файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 09:38 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Может это поможет: Retrieving Data from BLOB into a file Упоминается работа с Oracle (можно предположить, что именно он имеется в виду, по типу BLOB) но ИМХО сойдет и для других БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 11:54 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
VortexCorba Код: plaintext 1. 2. ResultSet#getBytes() возвращает в виде массива байт то, что вернул db driver. Правильнее было бы использовать метод ResultSet#getBlob("xxx") и уже у него дёргать getBytes() или getBinaryStream(). "new byte[(int)rs.getBytes(byteArray).length];" - создаётся массив, но не заполняется значениями (каст (int) тоже непонятно к чему). Так ничего не вытащить :) Если можно то идем дальше: Код: plaintext 1. 2. 3. Ещё бы, в конструкторе FileInputStream(String) указывается имя файла, а не абы что. Если нужно заполнить массив result значениями из массива rs.getBytes(), то так и делай, либо в цикле, либо через System.arrayсopy(), либо тупым присвоением result = rs.getBytes(), если этому ничего не мешает. Если нужно скинуть содержимое blob'a в файл, то пожалуйста: Blob b = rs.getBlob("xxx"); InputStream is = b.getBinaryStream(); FileOutputStream fos = new FileOutputStream("xxx.tmp"); ... fos.close(); Что значит хранится "class файл"? Cодержимое *.class? Если нужно загрузить класс, то нужно переопределить классЛоадер. Писать байты в файл не обязательно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Только какой смысл пихать в базу данных класс файлы? От этого будет больше проблем чем пользы, imho. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 13:17 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Только какой смысл пихать в базу данных класс файлы? От этого будет больше проблем чем пользы, imho. Иногда бывают нужны совсем непонятные весчи :) Хотел как то сделать похожую штуку. Но решил сделать проще и не хранить классы в бд, а только их полные названия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 13:55 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. А как наоборот залить в таблицу class файл? Напишите пример пожалуйста. Заливаю и вытаскиваю class файл потому что все это на MainFrame - е работать будет. Там не извесно как себя поведет прога если будет лежать на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 14:20 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
[quot VortexCorba Код: plaintext 1. А такой метод разве есть? Есть метод Blob#getBytes(long pos, int length); Если уж зашла речь про ошибки, то стоит писать хотя бы их название :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 15:29 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=121946 По-моему, было разжевано дальше некуда. PS. Фирма - бизнес-партнер IBM? Интересно как у вас там распространены iSeries, zSeries, какой круг задач решаете на них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 21:43 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
автор PS. Фирма - бизнес-партнер IBM? Интересно как у вас там распространены iSeries, zSeries, какой круг задач решаете на них? Нет, как там IBM. Пишем для одной компании, просто я в Жава новичек и все. Blob b.getBytes(long pos, int legth); здесь pos - position? т.е с какой позиции читать массив байтов? автор class MyClassLoader extends ClassLoader{ public Class loadClass(byte[] bytes) { return defineClass(null, bytes,0, bytes.length); } } .................. //somewhere MyClassLoader loader = new MyClassLoader(); Class xxx = loader.loadClass(bytes); System.out.println("Class Name: " + xxx.getName()); Вот так таписал, все классно. Но я никак не могу понять что именно запускает класс файла? метод defineClass? Вроде бы он только массив байтов в файл превращает и все. Если написать так как ты писал то он скорее всего массив байтов превратит м файл и все. На этом и остановится. Каково твое мнение об этом? автор ........... return defineClass(null, bytes,0, bytes.length); ........... null - можно писать? т.е файл без названии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2004, 06:17 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
VortexCorbaВот так таписал, все классно. Но я никак не могу понять что именно запускает класс файла? метод defineClass? Вроде бы он только массив байтов в файл превращает и все. Если написать так как ты писал то он скорее всего массив байтов превратит м файл и все. На этом и остановится. Каково твое мнение об этом? Массив превращается не в файл, а в описание класса. Пользоваться этим описанием можно по рефлекшину. Смотри методы класса Сlass. ........... return defineClass(null, bytes,0, bytes.length); ........... null - можно писать? т.е файл без названии? Не файл без названия, а класс. Ты ведь не знаешь имя класса. После того как ты его загрузил, ты можешь узнать его имя (см.методы класса Сlass). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2004, 09:18 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Ребята, помогите!! =) Я и так и эдак пишу свой лоадер. Типа такого: public Class loadClass(String name) throws ClassNotFoundException { byte[] data = loadClassData(name); return defineClass(null, data, 0, data.length); } Стал смотреть под отладчиком. При выполнении defineClass(), программа не возвращает значение, а как бы прыгает снова на первую строку, loadClassData(name), и значение name уже не нужный мне класс, а java.lang.Object. Далее, она пытается его найти по тому же пути, что и нужный мне класс, конечно не находит и бросает эксепшн. Нафига она ищет java.lang.Object? Класс который я пытаюсь загрузить очень простой, он "пустой": ClassForLoad{} В чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2005, 13:35 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2005, 14:12 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
to А.Грасоff™ Ну в общем-то так. У меня все то же. Но странное поведение во время defineClass(). Нафига он пытается загрузить еще один класс, если надо просто сделать define нужного мне класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2005, 14:32 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Вот еще что добавлю. Зачем мне это надо: в спецификации VM вроде бы сказано, что класс характеризуется не только полным именем, но и своим загрузчиком. Мне надо загрузить VM кучей-кучей классов. Вот я беру newInstance своего загрузчика и пытаюсь загрузить им один класс, затем другой instance и опять гружу, а в итоге должны получиться разные классы. Но грузить должен не системный загрузчик, чтобы экземпляры загрузчиков были разные. Вот как сделать, чтобы мой загрузчик не делегировал загрузку где-то внутри себя системным загрузчикам? Вот начерта он пытается грузить java.lang.Object, который приходится грузить системным загрузчиком, и это все портит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2005, 14:42 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Вот начерта он пытается грузить java.lang.Object любой класс Java обязан наследоваться от java.lang.Object и никуда от этого не денешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2005, 15:28 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
to wessen Ну вообще да. Только этот класс по идее уже должен быть загружен и так. А второй раз его не должны грузить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2005, 09:28 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
Системный загрузчик вначале ищет класс среди загруженных, если не находит, то тогда загружает. Так что класс java.lang.Object два раза считываться не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 09:28 |
|
||
|
Превращение байтов в class файлы
|
|||
|---|---|---|---|
|
#18+
to space_center Вроде бы да. Но на деле он делает что-то похожее на загрузку этого класса. Короче, как я понял, на самом деле вручную загрузить класс не удастся? Все равно на каком-то этапе это будет делать системный загрузчик? Вот в моей ситуации, при загрузке любого класса на каком-то этапе он хочет грузить Object, и передает это системному загрузчику? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 08:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33286138&tid=2151409]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 416ms |

| 0 / 0 |
