[英]Unable to read messagepack bytes into Uint8Array buffer in js
我花了最后一個小時試圖用 Python 和 Javascript 之間的消息包(好吧,ClojureScript ...)做一個簡單的 hello world。 出於某種原因,我無法將 msgpack 有效負載正確讀入 javascript 緩沖區。
我正在使用msgpack-python
和msgpack-lite
。
在 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'
我正在使用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.