【问题标题】:Convert Java ByteBuffer to JavaScript ArrayBuffer将 Java ByteBuffer 转换为 JavaScript ArrayBuffer
【发布时间】:2021-06-03 07:15:13
【问题描述】:

我喜欢将 ArrayBuffer 从 JavaScript 发送到 WebSocket 服务器,该服务器将二进制文件返回给网络中的其他客户端。

我的问题是,我不知道如何将 ArrayBuffer 从 JavaScript 1:1 发送到服务器,然后从服务器发送回客户端。

我尝试了一个简单的 ByteBuffer,但它只发送一个数组元素。 然后我尝试了:

        InputStream arrayIO = new ByteArrayInputStream(payloadIO);
        ByteBuffer bufferIO = ByteBuffer.allocate(payloadIO.length + 1);

        while (arrayIO.available() > 0) {
            bufferIO.put((byte) arrayIO.read());
        }

        for (Session rowIO : sessionsIO.values()) {
            if (rowIO.isOpen()) {
                rowIO.getRemote().sendBytes(bufferIO);
            }
        }

这给了我:

Buffer [0]
0: 0
offset: (...)
parent: (...)
buffer: (...)
byteLength: (...)
byteOffset: (...)
length: (...)
Symbol(Symbol.toStringTag): (...)
__proto__: Uint8Array

关于 JavaScript 部分。

【问题讨论】:

    标签: javascript java arrays bytebuffer arraybuffer


    【解决方案1】:

    我通过在客户端接收站点上添加偏移量来修复它。 服务器在前 4 个字节上发送操作码 (RFC6455)。

    dataIO.buffer.slice(4)
    

    【讨论】:

      【解决方案2】:

      您可以将字节转换为字符串列表,然后将它们解析回二进制字节。

      class ArrayBufferUtil {
        static toString(buffer) {
          return new Uint8Array(buffer).toString()
        }
        
        static parse(s) {
          return new Uint8Array(
            s.split(',').map(i => parseInt(i, 10))
          ).buffer
        }
      }
      

      测试

      console.log( ArrayBufferUtil.toString( new ArrayBuffer(8) ))
      console.log( ArrayBufferUtil.parse( '0,0,0,0,0,0,0,0' ))
      

      【讨论】:

        猜你喜欢
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多