如何在 jxbrowser 中将字节数组 (byte[]) 从 java 传递到 javascript Java:Javascript:

问题描述

有谁知道是否以及如何在 jxbrowser 中将字节 [] 从 java 传递到 javascript?
(目标是在浏览器中打开一个二进制文件而不弹出文件选择器对话框)。
当我尝试本地传递 byte[] 时:

Java:

                JsFunction function = frame.executeJavaScript("openFileContent");
                byte[] blob = new byte[3];
                blob[0] = 10;
                blob[1] = 20;
                blob[2] = 30;
                return function.invoke(instance,blob);

Javascript:

    openFileContent = function(fileContent) {
        console.log(fileContent);
        console.log(fileContent[0]);

在 javascript 方面,我得到:

[object [B]
undefined

所以它看起来并没有被编组成任何可用的东西。
我的另一种方法是将 blob 包装成一个 POJO,例如:

    public static class JsBlob {
        private byte[] buffer;

        public JsBlob(byte[] buffer) {
            this.buffer = buffer;
        }

        @JsAccessible
        public byte get(int index) {
            return buffer[index];
        }

        @JsAccessible
        public byte[] getBuffer() {
            return buffer;
        }

        @JsAccessible
        public int getLength() {
            return buffer.length;
        }
    }

由于在逐字节获取实际数组内容时的所有进程间调用,这在工作时非常慢。

我当前的后备方案是将 base64 编码的 blob 传输到字符串中,该字符串确实被正确编组为字符串,然后在 js 端对其进行解码,但如果可能的话,我想尽可能避免这种不必要的处理。

解决方法

产品路线图中对 JavaScript 数组的支持:https://jxbrowser-support.teamdev.com/roadmap/

因此,下一版本将支持此功能。您可以在 Twitter 上关注 JxBrowser 以了解此功能何时发布:https://twitter.com/JxBrowserTeam