序列化性能和 Google Android

2024-02-17

我正在寻找加快序列化性能的建议,特别是在使用 Google Android 时。对于我正在从事的一个项目,我试图将数百个对象从服务器中继到 Android 应用程序,并经历各个阶段以获得我需要的性能。

首先,我尝试了一个糟糕的 XML 解析器,我使用 Scanner 专门针对这个项目将其组合在一起,这导致加载对象时的性能极其缓慢(300KB 文件大约需要 5 分钟)。然后,我摆脱了这一点,让我的类实现了 Serialized,并将我拥有的对象的 ArrayList 写入了一个文件。将该文件读取到 Android 对象中(请注意,文件已下载)对于约 100KB 的序列化文件需要约 15-30 秒。我仍然发现这对于 Android 应用程序来说是完全不可接受的,因为我的应用程序需要在启动应用程序时加载数据。

我已经简要阅读了有关Externalized 以及它如何提高性能的信息,但我不确定如何使用嵌套类来实现它。现在,我正在尝试存储以下类的 ArrayList,以及其下面的嵌套类。

public class MealMenu implements Serializable{
private String commonsName;
private long startMillis, endMillis, modMillis;
private ArrayList<Venue> venues;
private String mealName;
}

和场地类:

public class Venue implements Serializable{
private String name;
private ArrayList<FoodItem> foodItems;
}

还有 FoodItem 类:

public class FoodItem implements Serializable{
private String name;
private boolean vegan;
private boolean vegetarian;
}

如果Externalized是提高性能的方法,那么当您尝试将其写出时,是否有关于java如何调用对象中的方法的信息?我不确定是否需要在父类中实现它,也不知道如何序列化每个对象中的嵌套对象。


切勿使用Serializable跨架构。您无法知道 Dalvik VM 是否具有与您服务器的 Java 版本兼容的序列化。即使它今天可以工作,也可能无法在两端升级。始终选择专门为跨架构工作而设计的东西。

选项包括:

  • 协议缓冲区
  • Apache Thrift(有效负载打包,不一定是 RPC 东西)
  • XML(您忽略了提及您使用的解析器——如果您使用 DOM,请尝试 SAX)
  • JSON(据报道 Jackson JSON 解析器比 Android 内置的 org.json 解析器更快)

此外,在应用程序启动时加载 300K 的数据也会带来麻烦。请考虑利用 SQLite 让您一次只处理所需的数据位。

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

序列化性能和 Google Android 的相关文章

随机推荐

  • LINQ - (x, i) 做什么?

    我今天偶然发现了这段代码 并意识到我根本不理解它 someArray Select x i gt new XElement entry new XElement field new XAttribute name Option i 1 重点
  • 从 VS2015 发布后,DNX Web 命令抛出“无法解析项目”错误

    这是关于 net core 的过时预发布版本 我使用 Visual Studio 2015 的测试版 预览版在预发布的 ASP Net 5 后来更名为 asp net core 中创建了一个基本项目 我已将该项目发布到文件系统并尝试运行它从
  • iOS Swift 标签栏图标插入在运行时被删除

    我在标签栏控制器中有两个 ViewController 在界面生成器中 我已将图像插图 5 5 5 5 应用于选项卡栏图标 以获得我想要的尺寸 当我最初运行模拟器时 一切看起来都很棒 但是当我使用 Tab 键切换到第二个 ViewContr
  • Airconsole 和 Unity 集成问题

    首先 我是 Unity 和 Airconsole 这两个平台的新手 我只是在探索与空调集成的统一 但我在导入 空调插件插件 时遇到错误 从Asset Store 我正在使用最新版本的unity2018 3 0f2 Personal在 Win
  • MEAN JS - 主要 html 文件 (index.html) 位于哪里

    我刚刚开始学习 MEAN JS 我正在尝试查找主页的 html 文件 但是我只在视图文件夹中看到 home client view html 和 header clinet view html 据我所知 通常有一个主html 包含了主页的所
  • glGetString 和 glGetShaderInfoLog 等函数使用什么编码

    OpenGL有一些功能 例如glGetString and glGetShaderInfoLog返回字符串 这些使用什么形式的文本编码 我认为 鉴于它们作为GLchar 它是返回值中包含的 ASCII 编码文本 但这是否在任何地方指定 作为
  • Flutter守护进程启动失败

    我每次打开时都会收到此警告VS code 有什么办法可以解决这个问题吗 谢谢 我添加了这个警告的日志 我努力了扑干净 and 扑医生一切都很好 但是每次我打开 VS Code 时仍然出现此警告 我还遇到了一个问题 VS Code 显示没有设
  • 实体框架 Linq 等于值或为 null

    我正在尝试使用 linq 从视图中获取项目列表 其中字段 LocationId 为值或为 null LocationId 字段是 int 我正在尝试的代码是这样的 var items context Items Where d gt d L
  • 每个工人的最大日期

    考虑两个表 工作表有如下字段W ID W Name 课程表有如下字段C ID C Name C Date 一个工人可以选修多门课程 一门课程也可以由许多工人选修 因此 两个表之间存在多对多关系 打破多对多 并创建一个名为 Takes 的新表
  • 如何调整 IntelliJ 中行尾的位置

    在 IntelliJ 中 就像在 Eclipse 中一样 代码编辑器中有一条细灰色垂直线 我假设就像在 Eclipse 中一样 该行显示了 行尾 应该在的位置 2个问题 1 在IntelliJ中哪里可以调整一行的长度 2 如果不使用与 1
  • React-Router:使用 Navlink 将道具从一个组件传递到另一个组件

    我在用
  • 如何通过svelte访问本地json文件?

    现在我使用 onMount 异步函数来访问 const dataAPI jsfwperf json let data onMount async gt const res await fetch dataAPI then res gt re
  • 在浏览器中使用模块(没有 WebPack)

    我正在摸索 ES6 的过程 遇到了模块 很好 在学习过程中 我试图看看是否可以在浏览器中使用它们withoutWebPack 我还没学过 所以 我的 JS 目录中有以下文件 文件夹结构 js lib for complied es6 via
  • 如何在单个android应用程序中正确导入多个unity模块,避免android studio中不同unity模块之间的名称冲突?

    我已经导入了两个统一模块 三角形模块和立方体模块 public class MainActivity extends AppCompatActivity Override protected void onCreate Bundle sav
  • 通过 crypto-js 的 base64 编码器

    我想将数字编码为字符 如何在输出中编码为 Base64 Code const CryptoJS require crypto js function msg return 7543275 I want to encrypt this num
  • Docker Compose 和 Kubernetes 有什么区别?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 在深入研究 Docker Google Cloud 和 Kubernetes 时 如果还
  • logd 快捷方式在 Intellij 和 Kotlin 中不起作用

    使用 logt logd loge 等快捷方式在 Intellij 中记录 Java 非常简单 但我搬到了 Kotlin 我注意到这些快捷方式不再起作用了 我不知道这是否与我的配置有关 如果不是 我该如何解决这个问题 您应该创建单独的模板以
  • 让应用程序布局与 Bootstrap 4 页面配合使用

    我使用的是 Domino 9 0 1 并成功安装了 Bootstrap Library 1 0 0 201403171254 在应用程序配置 Xsp 属性 常规下 我将主题设置为 bootstrapv3 1 1 并在应用程序配置 Xsp 属
  • 页面刷新后保留值

    我在 C 中使用按钮控件 验证按钮 我在我的项目中定义了一些全局变量 当我单击该按钮时 会发生一些表单验证 并且另一个按钮 保存按钮 可见 问题是当我单击验证按钮时 当前页面刷新并且全局变量不包含值 它显示为空 即使在页面刷新后 我如何维护
  • 序列化性能和 Google Android

    我正在寻找加快序列化性能的建议 特别是在使用 Google Android 时 对于我正在从事的一个项目 我试图将数百个对象从服务器中继到 Android 应用程序 并经历各个阶段以获得我需要的性能 首先 我尝试了一个糟糕的 XML 解析器