2010-11-24 3 views
1

Я работаю над приложением с интерфейсом javascript, который может получать кучу октетов с сервера (пока я использую php's chr() для имитировать некоторые данные).Передача двоичных данных из Javascript в Java-апплет через LiveConnect

Попытка передать данные из javascript в апплет, который нужно манипулировать, оказывается затруднительным. Поскольку данные могут иметь нулевую середину строки, похоже, что она заканчивается при первом запуске нулевого значения. Также похоже, что когда двоичные данные касаются переменной javascript, кодирующие помехи с некоторыми байтами (или, может быть, это просто проблема с тем, как я его показываю)

В любом случае, какие параметры у меня есть для принятия блока двоичных данных, отправленных с сервера и помещения его в апплет Java для управления. Является ли преобразование в base64 (или некоторая другая кодировка) моей единственной опцией, если я хочу сохранить целостность данных?

Все это ново для меня, так что, надеюсь, я все понял.

ответ

3

Ах, проклятие liveconnect.
Да, вам либо нужно, либо используйте urlencode или base64, чтобы получить ваши данные.

Даже при передаче материала с JavaScript на Flash (или обратно) вам нужно это, потому что интерфейс между ними использует строки с нулевым завершением (что просто глупо, я знаю).

+0

Благодарим за это, однако, похоже, что я теряю некоторые вещи на маршруте. Я кодирую с encodeURI() на стороне js (escape() лишен) и декодирование с помощью URLDecoder на стороне java. Согласно документам, похоже, они идеально подходят. Один байт задачи - 0xC0, который декодируется как ffffffef ffffffbf ffffffbd. Есть идеи? – cmjreyes 2010-11-26 19:46:09

+0

Похоже, что когда-то Javascript затрагивает его, я теряю эти более высокие байты. Если я base64 это с моего тестового сервера, он делает все в порядке, но это не возможно. Мне придется кое-что выяснить. – cmjreyes 2010-11-26 21:03:42

0

Я думаю, что архитектура, когда ваш скрипт java получает двоичные данные и передает его в java-апплет, не является оптимальным. Возможно, вы думали изменить апплет, чтобы заставить его перейти непосредственно на сервер и получить двоичные данные? Без java-скрипта?