簡體   English   中英

無法將消息包字節讀入 js 中的 Uint8Array 緩沖區

[英]Unable to read messagepack bytes into Uint8Array buffer in js

我花了最后一個小時試圖用 Python 和 Javascript 之間的消息包(好吧,ClojureScript ...)做一個簡單的 hello world。 出於某種原因,我無法將 msgpack 有效負載正確讀入 javascript 緩沖區。

我正在使用msgpack-pythonmsgpack-lite

Python

在 Python 中,我正在生成我的有效負載並寫入二進制文件,如下所示:

bts = msgpack.packb({"blah": 1, "bleh": [0, 1]}, default=encode)
with open('/tmp/sample.msgpack', 'wb') as f:
    f.write(bts)

此消息似乎是正確的,因為我可以在https://kawanet.github.io/msgpack-lite/ 中驗證其十六進制轉儲,但我確實需要在生成的字符串中添加空格......我使用以下行生成十六進制表示:

codecs.getencoder('hex_codec')(bts)[0]`)
# b'82a4626c6568920001a4626c616801'

Javascript

我正在使用http-server -p 3000 --cors提供這個二進制文件。 Javascript bleh blah簡單 GET 的響應主體如下: bleh blah 我的問題是我無法將它正確加載到 Uint8Array 中:

Uint8Array.from(body)
// Uint8Array(15) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
new Uint8Array(body) 
// Uint8Array(0)

我究竟做錯了什么? 顯然,正如我們在凌亂的字節表示中所看到的那樣,有效載荷並非全為零。 我也很驚訝使用.from()生成一個正確長度的數組,但隨后無法設置內容。

我假設您收到了一個 blop,我遇到了類似的問題,並通過使用 FileReader 解決了它並將其作為緩沖區字符串讀取。

const reader = new FileReader()
reader.readAsBinaryString(body)
reader.onload = function(e) {
    const data = e.target.result
    var buffer = new Uint8Array(data.length)
    for (let i = 0; i < data.length; i++) {
        buffer[i] = data.cahrCodeAt(i)
    }
    const decoded = msgpack.decode(buffer)
    console.log(decoded) // <-- Your unpacked message
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM