[英]Is there a zero-copy way to create a bytearray from a memoryview?
我遇到了一個我認為將是一個非常簡單的問題(我希望它是),即從 memory 中取出原始數據。 並將其解碼為 Unicode 字符串。
這樣做是顯而易見的方法,並且有效:
the_string = mv.tobytes().decode("utf-8")
其中 mv 是有問題的內存視圖。 但這違背了零拷貝的目的,因為拷貝是由 tobytes() 方法生成的。 所以接下來要嘗試的是將內存視圖“轉換”為字節數組。 換句話說,創建一個使用 memory 視圖“mv”作為其支持數據的字節數組。 我認為這很簡單,但我不知道該怎么做。 有沒有人知道怎么做?
答案是 stdlib 中的codecs.decode
。
例如:
>>> b = "Hello 你好".encode("utf-8")
>>> b
b'Hello \xe4\xbd\xa0\xe5\xa5\xbd'
>>> m = memoryview(b)
>>> m.decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'memoryview' object has no attribute 'decode'
>>> import codecs
>>> codecs.decode(m, "utf-8")
'Hello 你好'
>>> codecs.decode(m[:-3], "utf-8")
'Hello 你'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.