Python中不可预测数据的字节数

时间:2018-06-08 16:03:19

标签: python arrays

我们从API调用中接收数据,但我们无法预测该数据的性质。挑战只是编写一个防弹转换(我天真地认为非常容易),从而产生一组可迭代的字节(字节数组或字节)。我尝试了各种方法,甚至尝试过io.BytesIO,但是一些输入类型仍然被拒绝(例如,代码类型会被踢出)。有什么建议?将数据视为字节不应该困难。谢谢你的帮助。

    def process_binary_object(self, api_data):
        api_dat_size = sys.getsizeof(api_data)
        if api_dat_size < 4 or api_dat_size > 4096:    # somewhat arbitrary
            return '0123'
        if isinstance(api_data, bytes):
            self.binary_seq = api_data
            print("Conversion technique aa succeeded.")
        else:
            try:
                self.binary_seq = api_data.tobytes()
                print("Conversion technique bb succeeded.")
            except (AttributeError, TypeError):
                try:
                    self.binary_seq = bytearray(api_data)
                    print("Conversion technique cc succeeded.")
                except (AttributeError, TypeError):
                    try:
                        mem_view = memoryview(api_data)
                        self.binary_seq = mem_view.tobytes()
                        print("Conversion technique dd succeeded.")
                    except (AttributeError, TypeError):
                        self.binary_seq = io.BytesIO(api_data)
                        print("Conversion technique ee succeeded.")
        # some types still don't make it
        first_four = self.binary_seq[:4]
        return first_four

2 个答案:

答案 0 :(得分:1)

经过一段时间的学习,使用Java并阅读了一本代码书,我发现了处理字节的策略。

字节最初是由Java虚拟机解释的。如果您的字节码来自Java实现的Web服务,则启动JVM并配置供JVM解析的流,然后JVM将根据需要实时完成其余工作。

这是通过将JIT(及时)编译器附加到JVM来完成的,字节码将实时编译为可执行的本机代码。任何其他非代码字节将被解释为这样。

传记:Java第七版,完整参考书

答案 1 :(得分:0)

Python的动态类型是为了帮助你吗?识别类型并将其序列化为您的目的,这是通过网络发送对象的标准约定,您不必创建它。

似乎这就是你想要做的事情。我确信有内置的序列化器和第三方序列化器可以满足您的喜好。

您必须设置环境以识别类型。如果api来自python,则安装包并将其导入您的环境。

如果它是基于C的,我猜你可以使用Cython并设置你的C环境并在那里安装插件并让python识别类型。无论哪种方式,我都会说开始使用Eclipse,它为您提供了创建自定义工作环境的灵活性,然后您可以在运行时调试应用程序并将代码组织成可扩展的工作流程。

希望它有所帮助...

print(help(api),outfile) or however you print to file for each api object.

每个不同的api都需要有文档,需要每个开发人员提供文档。寻找任何获取功能。