IDEA提示:java: 常量字符串过长

大家好,我是瑶山,今天聊聊java执行字符串过长的问题

起因

main方法测试一个上传人脸的请求,人脸图片使用Base64格式字符串,执行失败,提示:java: 常量字符串过长

在Java中,当你在main方法中直接使用一个字符串常量,并且这个字符串常量的长度超过了JVM默认的方法大小限制时,你可能会遇到"常量字符串过长"的错误。这个限制是编译器和JVM对于方法大小的内部限制,通常是出于性能的考虑。

方案

解决方法:

  1. 如果字符串内容可以分割,尝试将长字符串分割成多个较短的字符串,然后在运行时将它们拼接起来。

  2. 如果是在命令行参数中传递长字符串,尝试将这个字符串写入一个文件中,然后在命令行中使用@文件名的方式来引用。

  3. 可以尝试使用字符串构造器或者StringBuffer/StringBuilder来动态构建长字符串,而不是直接使用超长的字符串常量。

  4. 如果是因为编码问题导致字符串变长,检查并确保源文件的编码与编译器期望的编码一致。

  5. 如果是因为JVM参数限制导致的问题,可以尝试增加JVM的参数限制,例如通过-XX:MaxInlineSize来增加内联大小限制,或者通过-XX:MaxMethodSize来增加方法大小的限制。

因为是图片转Base64,内容过长,这里使用文件读取的方式,首先,创建face.txt,将Base64格式字符串复制进来,通过代码读取:

当然,这是因为我已经有了Base64格式字符串,另外使用源图片代码转为Base64格式也可以

复制代码
    /**
     * 读取内容
     * @return String
     */
    static String getBase64Img() {
        StringBuilder sbf = new StringBuilder();
        String filePath = "F:\\test\\java\\api\\face.txt";
        try {
            Files.lines(Paths.get(filePath)).forEach(sbf::append);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sbf.toString();
    }

再次执行, 成功。

ending

人的一生 必须要学会做一件事 而且要做到透彻 才不枉此生...共勉 💪。

相关推荐
cfm_29141 小时前
Leaf-segment号段模式
java
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 发布圈子动态:数据库表和接口文档介绍
java·数据库·交友
paopaokaka_luck1 小时前
智慧电玩店管理系统(空闲机台随机分配、游玩时长概率模拟、积分自动结算、积分兑换闭环、 ECharts经营分析、 腾讯地图选址)
java·人工智能·mysql·echarts·推荐算法
开开心心就好1 小时前
发票信息录入太麻烦?离线工具一键转表格
运维·服务器·前端·pdf·ocr·maven·intellij-idea
LMT流氓兔1 小时前
第五单元——第9课:防止同一次操作重复执行
java·服务器·数据库·算法·ai·langchain
OxYGC1 小时前
Spring 面经系列 · 第 6 篇:Spring MVC 请求全流程、父子容器与零配置原理
java·spring·mvc
code2cat1 小时前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
bksczm1 小时前
Redis数据结构之string
java·redis·mybatis
cc_瀚海知行1 小时前
资料检索 1|直接放入全文、按需读文件和先检索,有什么区别?
java·人工智能·ai
NamoAmitabha1282 小时前
安装“编译器环境”(Android Studio)--deepseek--Cocos --Creator3.8.8
android·ide·android studio