热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java解析python使用pickle序列化后的数据

2019独角兽企业重金招聘Python工程师标准换了新公司,一切也重新开始,接触到的第一个活就是可能需要将之前python写的一套数据传输的代码&

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    换了新公司,一切也重新开始,接触到的第一个活就是可能需要将之前python写的一套数据传输的代码,改用Java实现,提高开发效率;

    python代码结构很清晰,分为两部分:

  1. 抽取接口数据,pickle序列化后打包上传到云服务器;
  2. 从云服务器下载,解析入库;

    我主要做的是先将解析入库这部分Java化,其中一个很大的问题就是解析pickle序列化后的数据,这个问题折磨我了2天。。

    主要是好像这种问题网上很少解决方案,也不知道是不是我这操作太奇葩了。。度娘就别想了,只能借助梯子了。看过网上的示例都没有能正常跑的,或多或少都有些问题,不过也让我了解到了目前的解决方案,也主要分为两种:

  1. 借助Jython来做,引入jar包后,可以在Java里使用python的代码,当然这应该是对应的Java实现吧,但是感觉有点重,jar包有30多M
  2. 使用pyrolite包,这个包主要是用于与python通信,进行远程调用python的方法;

   

    因为我们数据打包上传跟下载解析是分开部署的, 如果在解析那块还去单独部署个python用来解析数据,再用Java去远程调用去获取返回值,这就有点多此一举了。。所以我们这边使用的就是通过引入Jython来实现了,到时候数据打包如果也改成Java实现的话,那就再改造了。

    先说说遇到的几个坑吧:

           init: Bootstrapping class not in BootstrapTypesSingleton.getClassToType()[class=class org.python.core.PyBaseString]

            

           解决这个问题花的时间最久,不解决的话使用pystring的时候会报空指针错误;之前从网上看到过类似的,需要在使用前先执行.gcMonitorGlobal方法,但是由于个人粗心。跑去调用pystring.gcMonitorGlobal,所以并没有卵用,最后仔细看错误发现是PyBaseString的问题,而PyString又是继承PyBaseString的,后来在代码中加入静态块解决该问题;

 

           102623_t5mB_3187740.png

            

       ValueError: insecure string pickle

            不安全的值,原因是也是格式问题,python序列化后的格式是这样的

 

               102631_vN2N_3187740.png

 

        然后读取时,在每行尾部需要加上"\n"换行才可以

 

                102638_2L1f_3187740.png

 

                至此遇到的大问题都已经解决,其他问题的话就比较常见了(比如格式转换异常这种),主要是也没有搜到什么完整的解决方案,也是自己东拼西凑才搞定的,也是不容易,还是因为对python也不太了解吧,遇到没见过的报错有点懵,而且有时候报的错也不一定是真实的错。例如ValueError这个错,最开始报的是空指针,通过调试代码看,是Jython里的异常类toString的时候空指针,导致无法发现真实的错误,只能一步步调试,才发现。。有点坑

            因为确实搜索过没有发现什么完整的解决方案或代码示例,所以整理出来希望能帮到大家!

               

 

参考网站:http://bugs.jython.org/issue2492

                https://github.com/irmen/Pyrolite

                https://nikoskatsanos.com/blog/2017/01/08/python-unpickling-in-java/

                http://www.roman10.net/2012/10/10/loading-python-pickle-files-from-java/

 

 


转:https://my.oschina.net/u/3187740/blog/1793070



推荐阅读
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
author-avatar
小唐永远支持小志
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有