【问题标题】:Passing binary data from Javascript into a Java applet via LiveConnect通过 LiveConnect 将二进制数据从 Javascript 传递到 Java 小程序
【发布时间】:2010-11-24 20:03:16
【问题描述】:

我正在开发一个带有 javascript 前端的应用程序,它可以从服务器接收一堆八位字节(目前我正在使用 php 的 chr() 来模拟一些数据)。

事实证明,试图将数据从 javascript 传递到小程序中进行操作是很困难的。由于数据可以在字符串中包含空值,因此看起来它在第一个空值进入时就终止了。看起来一旦二进制数据接触 javascript 变量,编码就会与某些字节混淆(或者这可能只是一个问题以及我的显示方式)

无论哪种方式,我有哪些选项可以获取从服务器发送的二进制数据块并将其放入 Java 小程序中进行操作。如果我想保持数据完整性,我唯一的选择是转换为 base64(或其他编码)吗?

所有这一切对我来说都是新的,所以希望我能清楚地理解。

【问题讨论】:

    标签: java javascript binary-data liveconnect


    【解决方案1】:

    啊,liveconnect 的祸根。
    是的,您需要或使用urlencodebase64 来获取您的数据。

    即使在将内容从 JavaScript 传递到 Flash(或返回)时,您也需要这样做,因为它们之间的接口使用以空字符结尾的字符串(我知道这很愚蠢)。

    【讨论】:

    • 谢谢你,但看起来我在途中丢失了一些东西。我在 js 端使用 encodeURI() 进行编码(escape() 已被弃用)并在 java 端使用 URLDecoder 进行解码。根据文档,它们似乎完美匹配。一个问题字节是 0xC0,它被解码为 ffffffef ffffffbf ffffffbd。有什么想法吗?
    • 看起来一旦 Javascript 触及它,我就会丢失那些更高的字节数。如果我从我的测试服务器对它进行base64,它可以很好地融入所有内容,但这不是可能的。我得想点别的办法。
    • 那么 JavaScript 使用 UTF16,你需要手动摆弄charCodeAt。或者尝试一些技巧 UTF8 编码,如 encodeURI(escape(String.fromCharCode("..."))) 并反转 unescape(decodeURI(String.fromCharCode("...")))
    【解决方案2】:

    我认为当您的 java 脚本获取二进制数据并将其传递给 java applet 时的架构不是最佳的。您是否可能想过修改小程序以使其直接进入服务器并获取二进制数据?没有任何java脚本?

    【讨论】:

    • 我突然想到了,但是这个小程序只在某些情况下使用,甚至不能用于(或加载)特定用户会话。它基本上是用于某些数据的特殊处理。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多