在Android中读取python pickle数据流

2023-12-15

我有这个文件,其中包含 python pickle 数据流。我必须在 Android 中读取该文件的内容。

例如,如果我想在 python 中读取这个数据流,我只需使用以下代码

queue = pickle.load(open('filename', 'rb'))

我想在 Android 中实现同样的目标,这样我就可以读取这个 pickle 流数据并将其存储在某种集合中。

我怎样才能实现这个目标?


更新:这仅适用于 pickle 协议2 and 3.

我觉得拆车工班级来自Pyrolite(麻省理工学院许可证)您可能特别感兴趣。从技术上讲它是Java,但Android基本上是Java。要取消pickle,您可以执行类似于以下操作的操作:

InputStream stream = new FileInputStream("filename");
Unpickler unpickler = new Unpickler();
Object data = unpickler.load(stream);
// And cast *data* to the appropriate type.

随着进口:

import java.io.FileInputStream;
import java.io.InputStream;
import net.razorvine.pickle.Unpickler;

这些是默认支持的对象:

PYTHON    ---->     JAVA
------              ----
None                null
bool                boolean
int                 int
long                long or BigInteger  (depending on size)
string              String
unicode             String
complex             net.razorvine.pickle.objects.ComplexNumber
datetime.date       java.util.Calendar
datetime.datetime   java.util.Calendar
datetime.time       java.util.Calendar
datetime.timedelta  net.razorvine.pickle.objects.TimeDelta
float               double   (float isn't used) 
array.array         array of appropriate primitive type (char, int, short, long, float, double)
list                java.util.List<Object>
tuple               Object[]
set                 java.util.Set
dict                java.util.Map
bytes               byte[]
bytearray           byte[]
decimal             BigDecimal    
custom class        Map<String, Object>  (dict with class attributes including its name in "__class__")

另请注意:

unpickler 只是返回一个对象。因为Java是静态类型的 语言,您必须将其转换为适当的类型。参考这个 表以了解您期望收到的内容。


更新:我使用各种pickle协议进行了测试(0-3)并发现它失败了0 and 1,但成功了2 and 3.

这是用于生成 pickled 数据的 python 代码:

import pickle

class Data(object):
    def __init__(self):
        self.x = 12

data = Data()

for p in [0, 1, 2]:
    with open('data.{}'.format(p), 'wb') as fh:
        pickle.dump(data, fh, protocol=p)

# Python 3 only.
with open('data.3', 'wb') as fh:
    pickle.dump(data, fh, protocol=3)

以及 unpickle 的 java 代码:

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Map;
import net.razorvine.pickle.Unpickler;

public class Test {
    public static void main(String[] args) throws IOException {
        String filename = args[0];
        InputStream inputStream = new FileInputStream(filename);
        Unpickler unpickler = new Unpickler();
        Map<String, Object> data = (Map<String, Object>)unpickler.load(inputStream);
    }
}

当运行时data.0 and data.1,失败并显示:

Exception in thread "main" net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for copy_reg._reconstructor)
  at net.razorvine.pickle.objects.ClassDictConstructor.construct(ClassDictConstructor.java:23)
  at net.razorvine.pickle.Unpickler.load_reduce(Unpickler.java:617)
  at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:170)
  at net.razorvine.pickle.Unpickler.load(Unpickler.java:84)
  at Test.main(Test.java:13)

当运行时data.2 and data.3,成功了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Android中读取python pickle数据流 的相关文章

  • 如何去掉android状态栏的电池图标?

    我通过去掉背景图像来删除 Android 中显示网络 电池和时间信息的状态栏 但图标仍然存在 我也想知道如何删除电池图标 不是用于应用程序 而是用于框架开发 提前致谢 你试过打电话吗 getWindow setFlags WindowMan
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • 当类明显存在时,我收到 java.lang.NoClassDefFoundError

    当我尝试在运行时使用该库时 出现以下错误 java lang NoClassDefFoundError com google api client extensions android2 AndroidHttp 我已经将此库添加到我的项目中
  • 错误膨胀类 android.support.design.widget.NavigationView [启动时崩溃]

    该应用程序应该有一个导航抽屉 可以从左侧拉出并显示各种活动 但是一旦将导航栏添加到 XML Activity homescreen 文档中 应用程序一启动就会崩溃 主屏幕 java package com t99sdevelopment c
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • Android 导航组件 - 从“任何地方”/基本片段导航?

    我正在开发一个应用程序 它有一个奇怪的花招 可以在设备旋转时打开特定的片段 在实现 android 的导航组件之前 所需要的只是对当前活动的引用 并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务 但是在转移到导航组件之后 我发现很
  • Android Lollipop 中应用程序外部配置文件和内部配置文件之间的数据传输

    相关问题安卓工作版 我的应用程序是一个设备管理员特权应用程序 现在我修改了创建托管工作配置文件并将其自身设置为配置文件所有者的代码 问题是 如果我upgrade我的应用程序 它成为设备管理员的配置文件所有者 现在将会有两份我的应用程序 一个
  • 以编程方式创建 FloatingActionButton(无需 xml)

    我很欣赏 Android 的 FloatingActionButton fab 功能 并希望在我的项目中的许多不同地方使用它们 现在 我有这样的东西 我有几个 xml 规范 除了 id 图标和 onclick 之外 所有这些规范都是相同的
  • 解析 XML 标签不匹配时出错

  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 无法使用 Zxing Android 扫描 Code 128

    我已将 ZXing 条码阅读器集成到我的 Android 应用程序中 它可以扫描大部分代码 但我有一张电费单 它无法扫描 使用 Galaxy Ace 5 0MP 我认为问题是由于相机分辨率和焦点造成的 因为当我使用 Xperia SL 12
  • Dart/Flutter 如何编译到 Android?

    我找不到任何具体的资源 Dart 是否被编译到 JVM 或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行 然后在 JVM 内的 Dart VM 中运行 Dart 前者更有意义 并且符合 无桥 的口号 但后者似乎更符
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • 使用部分字符串匹配进行 Firebase 查询[重复]

    这个问题在这里已经有答案了 假设我有一个简单的 firebase 实时数据库结构 其中关键是username其值为userid 现在我想搜索userid by username 如果用户名匹配 这很容易 但如何获得部分匹配的答案 更清楚地说
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • 应用内计费问题

    我正在尝试在应用程序购买中实施 但几天来一直遇到问题 当用户尝试购买时 它是成功的 但应用程序给出了一个奇怪的错误 该错误显然可以追溯到操作系统构建蜂窝 该错误阻止用户收到购买 直到他们再次单击购买按钮 Steps 进行购买 购买成功 没有
  • Javascript文件上传[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 JavaScript 中有
  • getApplicationContext() 使用时抛出异常

    我已经根据现有 Android 项目中的另一个类指定了一个类 addRow 方法应该动态地将行添加到表中 当创建一个新的 TextView 添加到我的行以及创建该行时 我应该指定 上下文 当前的方式 尝试 getApplicationCon
  • 在迭代列表时修改列表 - 为什么不呢? [复制]

    这个问题在这里已经有答案了 几乎每个关于这个主题的教程和答案都坚持认为 在迭代列表时永远不应该修改列表 但如果代码有效 我不明白为什么这是一件坏事 例如 while len mylist gt 0 print mylist pop 我错过了
  • 写入 CSV 时,从 csv 值中删除“”并更改列名称

    我正在尝试从 R 表创建 csv 文件 但我无法理解为什么所有的值都会得到 当我使用 write csv 函数时用 检查 我的数据如下所示 Sample Sample Name Sample Group Pool ID Sample Pla
  • php中如何正确计算?

    total 30 nr1 13 nr2 6 nr3 3 我知道我们在学校学过 但是什么是第一个 或 或 或 括号在哪里或者我什至需要它们吗 您将括号放在应该计算的优先级上first 在数学中 它从除法 乘法 减法开始 最后是加法 因此 以下
  • 需要在设备有 WiFi/数据连接时运行服务

    上次 我使用以下代码来运行后台服务 Intent intent new Intent InitActivity this GetService class PendingIntent pintent PendingIntent getSer
  • 如何在 Windows XP 上安装 GDI+ 1.1 版?

    有人成功做到这一点吗 据我了解 GDI 1 1 仅随 Vista 一起提供 我正在尝试接触不同的效果类 我正在使用 C VS2008 VC9 根据 Windows Vista 的 EULA GDI 1 1 不可重新分发
  • 删除加法逆元对

    这个问题是基于我之前在 SO 上提出的两个问题 每个问题都比前一个更复杂 在上一篇文章中 如何识别 R 中行的镜像重复项 我想识别数据框中行的 部分 匹配 具体来说 如果数据帧中的特定行基于列子集之间的匹配在数据帧中的其他位置具有重复行 我
  • 部署到 Istio(使用 Kubernetes)的 Jhipster 无法正确加载

    我正在将 Jhipster 应用程序部署到 Kubernetes 环境 并使用 Istio 进行网络连接 下面是我的虚拟服务 请注意 当prefix被设定为 一切正常 但是 我有几个应用程序在此集群上运行 因此我需要将其映射到 mywebs
  • 如何禁用 Django 查询缓存?

    在我的 Django 应用程序中 我在数据库上重复运行相同的查询 例如每 10 秒 然后 我根据收到的查询集创建 MD5 总和 并将其与我在上次运行中创建的 MD5 总和进行比较 如果两者相等 则数据没有改变 网页不需要更新 当我这样做时
  • Linux脚本启动、停止、重新启动[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 谁能告诉我这个脚本到底做了什么 bin sh test f usr bin sshd exit 0 case 1 in start echo n Starting sshd ss
  • Java 6 的性能改进是针对 JDK、JVM 还是两者?

    我一直想知道 Java SE 6 中所吹捧的性能改进 是在编译器中还是在运行时中 换句话说 由 JDK 6 编译的 Java 5 应用程序在 JSE 5 下运行时是否会看到改进 表明编译器优化得到改进 由 JDK 5 编译的 Java 5
  • 通过 acrokey 查找字段绝对位置和尺寸

    给定一个 acrokey 是否可以找到该特定字段的绝对位置和尺寸 getLeft getTop getWidth getHeight 反之亦然是否可能 如果我知道位置 我可以获得该字段的缩写吗 你的问题的第一部分 假设您有一个AcroFie
  • WinForms:如何在即将显示时自定义工具提示?

    我想为树视图中的每个项目和列表视图中的每个项目提供一个工具提示 并且为列表视图中的每个子项目 即列 提供不同的工具提示 我可以确定我想要显示的文本 使用当前鼠标位置的命中测试等 private void toolTip1 Popup obj
  • .htaccess 修复了 PHP 中的漂亮永久链接?

    也许我的处理方式是错误的 但我在我们自己开发的 CMS 中有一些页面 我想使用漂亮的永久链接进行转换 目前 他们的页面 URL 如下所示 http ourdomain com articles permalink blah blah bla
  • 作业不通过使用 RabbitMQ 运行 celery 的 Airflow 执行

    下面是我使用的配置 core The home folder for airflow default is airflow airflow home root airflow The folder where your airflow pi
  • 'NSInvalidArgumentException',原因:'-[UIImageView _isResizable] 自定义表格视图单元格异常

    I get a NSInvalidArgumentException在我的自定义单元的执行时间上 调试器错误日志 2014 12 25 21 39 11 397 Codebuddies 24159 11353215 Terminating
  • PHP 用 dom 返回 html 表的第 n 行

    我正在尝试使用 simplehtmldom http simplehtmldom sourceforge net 打印出表格的第 n 行 目前没有任何反应 我还需要做什么吗 假设第 9 行是 TUE 行 您也可以使用 PHP 内置的 DOM
  • 在Android中读取python pickle数据流

    我有这个文件 其中包含 python pickle 数据流 我必须在 Android 中读取该文件的内容 例如 如果我想在 python 中读取这个数据流 我只需使用以下代码 queue pickle load open filename