我是Flatbuffers的新手,它提高了我对Python的了解,因此如果我忽略了一些简单的内容,请原谅我。
我正在尝试使示例Monster应用程序在Python上运行,但收到以下错误: struct.error:unpack_from需要至少4个字节的缓冲区
我正在使用教程中的文件,使用flatc生成代码并读取Monster数据文件。当我尝试使用“ monster.Mana()”访问数据时,会向我显示错误消息。
这是我正在使用的代码,这不能再简单了。 我已经尝试了两个版本2.7和3.6的代码,并得到了相同的错误:-(
import MyGame # refers to generated code
import MyGame.Example as example
import MyGame.Example.Color # refers to generated code
import MyGame.Example.Monster # refers to generated code
import MyGame.Example.Weapon # refers to generated code
import MyGame.Example.Vec3 # refers to generated code
buf = open('monsterdata.json', 'rb').read()
buf = bytearray(buf)
monster = MyGame.Example.Monster.Monster.GetRootAsMonster(buf, 0)
mana = monster.Mana()
import MyGame # refers to generated code
import MyGame.Example as example
import MyGame.Example.Color # refers to generated code
import MyGame.Example.Monster # refers to generated code
import MyGame.Example.Weapon # refers to generated code
import MyGame.Example.Vec3 # refers to generated code
buf = open('monsterdata.json', 'rb').read()
buf = bytearray(buf)
monster = MyGame.Example.Monster.Monster.GetRootAsMonster(buf, 0)
mana = monster.Mana()
错误消息:
文件“ /project/sample/MyGame/Example/Monster.py”,第34行,在Mana中 o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) 文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/table.py”,第37行,偏移 vtable = self.Pos-self.Get(N.SOffsetTFlags,self.Pos) Get中的文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/table.py”,第93行 返回flags.py_type(encode.Get(flags.packer_type,self.Bytes,关闭)) Get中的文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/encode.py”,第24行 返回packer_type.unpack_from(memoryview_type(buf),head)[0] struct.error:unpack_from需要至少4个字节的缓冲区
我确定自己做的蠢事,希望能得到一些帮助。
rgds 科林
答案 0 :(得分:0)
经过一些进一步的测试并退后一步来查看实际的问题是什么,我意识到自己做错了。
我发布的代码是读取json文件并转换为二进制形式,而不是读取使用flatc生成的二进制形式。这当然是行不通的,并导致了错误。纠正代码以读取二进制数据后,所有操作均按预期进行。