Java 代码如果要 10 万行,该如何处理

2020-12-11 14:29:21 +08:00
 QBugHunter

RT,现在有个配置文件,有 5 到 10 万个 String,这些 String 是由服务器生成的,然后我写了一个 py 脚本,把这写数据转换成 java 代码,类似这样

deviceId.add("IKP_110");
deviceCode.add(12);
deviceId.add("IKPP_17");
deviceCode.add(52);
deviceId.add("IKJCP_1K");
deviceCode.add(165);

这样我在安卓工程里的某个类里建立了 2 个 list,然后把这写代码( 5-10 万行)复制进去,类似这样

private List<String> deviceId = new ArrayList<>();
private List<Integer> deviceCode = new ArrayList<>();

void getDeviceData(){
//把 5-10 万代码复制到这里
}

然后 Android studio 提示我,内存不足。。。。 我向问些这个有没有什么问题,我自己测试,手机添加 10 万个数据只要 0.02 秒,所以我开始以为这个操作不会有什么太大问题。。。。

对于这种情况,假设有 5-10W 组数据作为配置文件(以后可能有修改),有没有别比较好的处理方?有考虑过数据库,但还是避免不了这个问题,我用 py 脚本把这些转换为数据库存储代码,但代码的行数还是 5-10W 行,Android Studio 提示行数过多,内存不足之类的。。

7400 次点击
所在节点    Android
22 条回复
340244120w
2020-12-11 14:30:46 +08:00
sqllite 的活呀
misaka19000
2020-12-11 14:33:45 +08:00
加内存
xuanbg
2020-12-11 14:36:34 +08:00
显然是放数据库里面呀
QBugHunter
2020-12-11 14:37:06 +08:00
@340244120w
但怎么把数据存放到数据库里呢?这些数据以后可能会更改,另外我们的 APP 不会通过应用市场安卓,是我们给用户一个 APK 文件直接安装。
这样每次升级的时候,我都要通过 10 万行代码把这些数据存到数据库里
GPLer
2020-12-11 14:38:23 +08:00
配置文件到数据库 √
配置文件到代码 ×
longaiwp
2020-12-11 14:39:17 +08:00
首先代码的行数是有限度的,你那么多的代码在一个方法里,就算内存够,最后大概率也编译不过去。
Elroooo0Y
2020-12-11 14:40:26 +08:00
放在代码里面不合适 ,读文件 OR 读 DB .
AS 报的内存不足不是运行时.
optional
2020-12-11 14:41:33 +08:00
不用数据库 csv 不行吗
QBugHunter
2020-12-11 14:43:30 +08:00
@GPLer
如何把这些数据写进数据库里?
taogen
2020-12-11 14:43:32 +08:00
直接读文件流不行吗
zjsxwc
2020-12-11 14:44:42 +08:00
不建议 IDE 来编辑这种超大文件超多行数的源代码文件,

建议写个循环来代替读写硬编码
```
for(id, code in file) {
deviceId.add(id);
deviceCode.add(code);
}
```
QBugHunter
2020-12-11 14:51:07 +08:00
@taogen

@zjsxwc

我把文件放在哪里?前提是每次升级,我都会编译一个 APK 文件直接给客户安装
debuggerx
2020-12-11 14:55:14 +08:00
不是生成 sql 代码 而是直接代码(比如 py )把数据写成 sqlite 的 db 文件,然后用户 app 更新的时候下发完整 db 的 zip 档案。如果担心下发数据量太大,可以根据版本号做 diff patch,只下发差异包和之前的 db 文件合并成最新的配置。
管理方法有两种,要么是每次都用 py 生成最新的 db,然后做 diff ;
或者用 sqlite studio 这样的工具编辑 db 再保存
Still4
2020-12-11 14:58:01 +08:00
数据放配置文件,代码实现读取,你不觉得一堆静态配置放代码里面很傻吗
debuggerx
2020-12-11 15:01:16 +08:00
@QBugHunter 常规做法是 db 文件或者 zip 档放在 assets 里,然后 app 启动时检查缓存目录,不存在文件时从 assets 中取出资源释放到缓存目录中,程序中用缓存目录中的 db 文件路径加载数据库,更新逻辑类似
USAA
2020-12-11 15:10:31 +08:00
写成*.properties,然后读文件就完了。
GPLer
2020-12-11 15:16:16 +08:00
@QBugHunter APK 里放配置文件,程序读取配置文件,如果不好读 python 输出成 json 或 xml 不就完事了。
yeqizhang
2020-12-11 15:33:29 +08:00
还不如写到 sqlite 里边呢,然后读取到内存中,properties 文件本质上和数据库也没啥差别。用数据库还方便修改删除..
zjsxwc
2020-12-11 16:24:12 +08:00
@QBugHunter #12
apk 打包放资源文件夹下面就行
fengpan567
2020-12-11 17:17:11 +08:00
一个类最多 65535 行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX