是否有零复制方法从内存视图创建字节数组?

dhy*_*ams 5 python arrays buffer decode memoryview

我遇到了一个我认为非常简单的问题(我希望如此!),即从内存中取出原始数据,并将其解码为 Unicode 字符串。

这样做是显而易见的方法,并且有效:

the_string = mv.tobytes().decode("utf-8")
Run Code Online (Sandbox Code Playgroud)

其中 mv 是有问题的内存视图。但这违背了零复制的目的,因为副本是由 tobytes() 方法生成的。因此,接下来要尝试的是将内存视图“转换”为字节数组。换句话说,创建一个使用内存视图“mv”作为其支持数据的字节数组。我认为这很简单,但我不知道如何做到这一点。有谁知道怎么做吗?

小智 0

答案codecs.decode在 stdlib 中。

\n

例如:

\n
>>> b = "Hello \xe4\xbd\xa0\xe5\xa5\xbd".encode("utf-8")\n>>> b\nb\'Hello \\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\'\n\n>>> m = memoryview(b)\n>>> m.decode("utf-8")\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nAttributeError: \'memoryview\' object has no attribute \'decode\'\n\n>>> import codecs\n>>> codecs.decode(m, "utf-8")\n\'Hello \xe4\xbd\xa0\xe5\xa5\xbd\'\n>>> codecs.decode(m[:-3], "utf-8")\n\'Hello \xe4\xbd\xa0\'\n
Run Code Online (Sandbox Code Playgroud)\n