python - 是否有从内存视图创建字节数组的零拷贝方式?
问题描述
我遇到了我认为将是一个非常简单的问题(我希望它是!),即从内存中取出原始数据,并将其解码为 Unicode 字符串。
这样做是显而易见的方法,并且有效:
the_string = mv.tobytes().decode("utf-8")
其中 mv 是有问题的内存视图。但这违背了零拷贝的目的,因为拷贝是由 tobytes() 方法生成的。所以接下来要尝试的是将内存视图“转换”为字节数组。换句话说,创建一个使用内存视图“mv”作为其支持数据的字节数组。我认为这很简单,但我不知道该怎么做。有没有人知道怎么做?
解决方案
答案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 你'
推荐阅读
- python - Python在多元线性回归中选择变量
- matlab - 在 Matlab 中生成两个相关的均匀随机变量
- regex - 使用多个 re.FLAG 时,运算符之间有什么区别
- regex - Python 正则表达式:标签之间的文本
- mysql - 限制数据库表只有一个未来日期记录
- php - 如何使用 PDO 进行 mysqli 查询?
- ios - iOS Swift 4 屏幕游戏滑动框
- c# - 无法加载文件或程序集'Microsoft.VisualStudio.TestTools.UITesting,版本 = 10.0.0.0 mstest 崩溃 nunit
- javascript - 函数在 React.js 中的 onClick 事件上不起作用
- c - C程序卡住,不进入main()