Java 代码如果要 10 万行,该如何处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
QBugHunter

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

  •  
  •   QBugHunter Dec 11, 2020 14387 views
    This topic created in 1966 days ago, the information mentioned may be changed or developed.

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

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

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

    @zjsxwc

    我把文件放在哪里?前提是每次升级,我都会编译一个 APK 文件直接给客户安装
    debuggerx
        13
    debuggerx  
       Dec 11, 2020
    不是生成 sql 代码 而是直接代码(比如 py )把数据写成 sqlite 的 db 文件,然后用户 app 更新的时候下发完整 db 的 zip 档案。如果担心下发数据量太大,可以根据版本号做 diff patch,只下发差异包和之前的 db 文件合并成最新的配置。
    管理方法有两种,要么是每次都用 py 生成最新的 db,然后做 diff ;
    或者用 sqlite studio 这样的工具编辑 db 再保存
    Still4
        14
    Still4  
       Dec 11, 2020
    数据放配置文件,代码实现读取,你不觉得一堆静态配置放代码里面很傻吗
    debuggerx
        15
    debuggerx  
       Dec 11, 2020
    @QBugHunter 常规做法是 db 文件或者 zip 档放在 assets 里,然后 app 启动时检查缓存目录,不存在文件时从 assets 中取出资源释放到缓存目录中,程序中用缓存目录中的 db 文件路径加载数据库,更新逻辑类似
    USAA
        16
    USAA  
       Dec 11, 2020
    写成*.properties,然后读文件就完了。
    GPLer
        17
    GPLer  
       Dec 11, 2020
    @QBugHunter APK 里放配置文件,程序读取配置文件,如果不好读 python 输出成 json 或 xml 不就完事了。
    yungo8
        18
    yungo8  
       Dec 11, 2020
    还不如写到 sqlite 里边呢,然后读取到内存中,properties 文件本质上和数据库也没啥差别。用数据库还方便修改删除..
    zjsxwc
        19
    zjsxwc  
       Dec 11, 2020
    @QBugHunter #12
    apk 打包放资源文件夹下面就行
    fengpan567
        20
    fengpan567  
       Dec 11, 2020
    一个类最多 65535 行
    fengpan567
        21
    fengpan567  
       Dec 11, 2020
    特地查了一下,每个方法最多 65535 字节,别的没限制了
    2kCS5c0b0ITXE5k2
        22
    2kCS5c0b0ITXE5k2  
       Dec 11, 2020
    SQLite 不挺好的吗
    About     Help     Advertise     Blog     API     FAQ     Solana     2582 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 11:35 PVG 19:35 LAX 04:35 JFK 07:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86