将Java ByteBuffer转换为JavaScript ArrayBuffer
我喜欢从JavaScript向WebSocket服务器发送一个ArrayBuffer,它将二进制文件返回给网络中的其他客户端 我的问题是,我不知道如何将ArrayBuffer从JavaScript 1:1发送到服务器,再从服务器发送回客户端 我尝试了一个简单的ByteBuffer,但它只发送一个数组元素。 然后我试着:将Java ByteBuffer转换为JavaScript ArrayBuffer,javascript,java,arrays,bytebuffer,arraybuffer,Javascript,Java,Arrays,Bytebuffer,Arraybuffer,我喜欢从JavaScript向WebSocket服务器发送一个ArrayBuffer,它将二进制文件返回给网络中的其他客户端 我的问题是,我不知道如何将ArrayBuffer从JavaScript 1:1发送到服务器,再从服务器发送回客户端 我尝试了一个简单的ByteBuffer,但它只发送一个数组元素。 然后我试着: InputStream arrayIO = new ByteArrayInputStream(payloadIO); ByteBuffer buf
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部分。您可以将字节转换为字符串列表,然后将其解析回二进制字节
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' ))
我通过在客户端接收站点上添加一个偏移量来修复它。 服务器在前4个字节上发送操作码(RFC6455)
dataIO.buffer.slice(4)