V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
QBugHunter
V2EX  ›  Android

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

  •  
  •   QBugHunter · 2020-12-11 14:29:21 +08:00 · 6262 次点击
    这是一个创建于 1237 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 提示行数过多,内存不足之类的。。

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

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

    @zjsxwc

    我把文件放在哪里?前提是每次升级,我都会编译一个 APK 文件直接给客户安装
    debuggerx
        13
    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
        14
    Still4  
       2020-12-11 14:58:01 +08:00
    数据放配置文件,代码实现读取,你不觉得一堆静态配置放代码里面很傻吗
    debuggerx
        15
    debuggerx  
       2020-12-11 15:01:16 +08:00
    @QBugHunter 常规做法是 db 文件或者 zip 档放在 assets 里,然后 app 启动时检查缓存目录,不存在文件时从 assets 中取出资源释放到缓存目录中,程序中用缓存目录中的 db 文件路径加载数据库,更新逻辑类似
    USAA
        16
    USAA  
       2020-12-11 15:10:31 +08:00
    写成*.properties,然后读文件就完了。
    GPLer
        17
    GPLer  
       2020-12-11 15:16:16 +08:00
    @QBugHunter APK 里放配置文件,程序读取配置文件,如果不好读 python 输出成 json 或 xml 不就完事了。
    yeqizhang
        18
    yeqizhang  
       2020-12-11 15:33:29 +08:00
    还不如写到 sqlite 里边呢,然后读取到内存中,properties 文件本质上和数据库也没啥差别。用数据库还方便修改删除..
    zjsxwc
        19
    zjsxwc  
       2020-12-11 16:24:12 +08:00
    @QBugHunter #12
    apk 打包放资源文件夹下面就行
    fengpan567
        20
    fengpan567  
       2020-12-11 17:17:11 +08:00
    一个类最多 65535 行
    fengpan567
        21
    fengpan567  
       2020-12-11 17:23:48 +08:00
    特地查了一下,每个方法最多 65535 字节,别的没限制了
    emeab
        22
    emeab  
       2020-12-11 23:04:28 +08:00
    SQLite 不挺好的吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2280 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 03:13 · PVG 11:13 · LAX 20:13 · JFK 23:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.