簡體   English   中英

是否有從內存視圖創建字節數組的零拷貝方式?

[英]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.

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