![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Fieral |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 10.12.2007 Репутация: нет Всего: 1 |
Мне нужно передать из Java в exe: массив размера H*W и потом (после обработки) обратно.
У меня есть исходник на с++ этого ехе-шника, который можно слека "подкрутить". Я сделал в яве запуск exe которому в качестве параметров запуска передаю H и W, а затем в exe читаю по очереди числа массива:
В яве я беру инпутстрим процесса и туда аналогично по очереди, через пробел записываю значения массива.
Как вы догадываетесь, это всё хоть и работает, но очень медленно. Поэтому вопрос: как делать передачу массивов между программами через стримы не через жопу правильно? --------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор. |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. А каков объем передаваемых данных?
2. Полный передачи код из Java приведи. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Mabramyan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 3.7.2007 Где: Алматы Репутация: нет Всего: нет |
Если есть исходники попробуй скомпилировать как dll библиотеку и подключить ее из java (смотри jni)
|
|||
|
||||
| Fieral |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 10.12.2007 Репутация: нет Всего: 1 |
Про объём данных: я передаю из явы в exe-шник изображение на обработку. (1-3Mb)
мой индийский код:
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну явных косяков я не вижу, есть некоторое непонимание вызванное неполнотой кода. Что возвращает this.input.GetDATA(this)? Можно ли переделать сам exe-шник?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| serger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Может потестить сам механизм? И пошаманить с буферами?
-------------------- упс! |
|||
|
||||
| Fieral |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 10.12.2007 Репутация: нет Всего: 1 |
this.input.GetDATA(this) - возвращает входной массив размера H*W числел из диапазона 0-255 (0 - чёрный, 255 - белый, остальные - оттенки серого)
проблема в том что на заливку массива 320*280 вот этим методом:
уходит около минуты поэтому меня интересует как вливать сразу весь массив "в один шаг" в екзешник? при том что у меня есть возможность править с++ код. --------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор. |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Хм...
А если просто залить данные во временный файл и считать, после чего удалить? Можно попробовать заюзать отображаемые на память файлы (http://www.exampledepot.com/egs/java.nio/CreateMemMap.html). -------------------- ![]() |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Думаю для начала стоит перейти с текстового формата на бинарный.
Кстати хороший вариант. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Fieral |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 10.12.2007 Репутация: нет Всего: 1 |
А можно эту часть поподробнее? --------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А че подробней, у тебя же есть OutputStream вот и пиши туда байты:
А в Си читай по 4 байта и приводи к int. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Мне кажется лучше разобраться с JNI. Нужно запихнуть си-код в функцию, скомпилить dll, подрубить dll из Java и вызывать Cи-функцию из библиотеки как обычный статический Java-метод. В двух словах описано ТУТ. В примере все вообще просто, без массивов. Я делал с массивом, и все работало отлично.
|
|||
|
||||
| Fieral |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 10.12.2007 Репутация: нет Всего: 1 |
Щас подробнее покурю эту ссылку. Пока один вопрос: как происходит стыковка java типов с с++ типами? --------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор. |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
В си подрубается jni.h
Аргументы в си-функцию будут приходить специальных типов: jobject, jdouble, jint и т.п. Фактически, ты с ними будешь работать как с обычными си-типами. Но тебе с этим особо заморачиваться не нужно. ты просто описываешь java-метод и натравливаешь на него javah.exe. Эта прожка сама сгенерит заголовок твоей си-функции, со всеми преобразованиями типов. Там есть некоторые неочевидные моменты с конвертацией строк и с массивами, но я думаю ты разберешься. Инфы в инете по этому делу валом. Вот здесь тоже глянь. Если будешь юзать какой-нить компилятор, типа cl виндовского, то могут возникнуть вопросы с опциями компиляции. Я с этим долго возился. Для начала сделай простенький пример из FAQ, и 90% вопросов сразу отвалятся. |
|||
|
||||
| alon4ik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 12.9.2009 Где: Харьков Репутация: нет Всего: нет |
если есть код на Си, не проще ли было бы переписать алгоритм на джаве? Или он достаточно сложный.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |