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

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

相关推荐
SamDeepThinking4 分钟前
警惕那些很长时间没有编写任何代码、却在设计系统的人
java·后端·架构
莫得感情 o5 分钟前
并发 13 · 异步编排
java·并发
TizzyGoodhealth7 分钟前
从零到一搭建Spring‑AI原生Tool‑Calling AI Agent|架构对比+完整实战源码+踩坑实录
java·ai·知识库·rag·ai agent·spring ai
mmsx9 分钟前
置灰按钮为什么自己又“亮“了?一次状态缓存“双写冲突“的排查记录
java·缓存·bug·livedata
rannn_1119 分钟前
【力扣hot100】图论专题+模板|DFS、BFS、拓扑排序...
java·算法·leetcode·深度优先·图论
用户31268748772013 分钟前
ReentrantLock 到底怎么排队的?AQS 源码拆解
java
Zane199413 分钟前
ArrayList 插入慢,LinkedList 一定快吗
java·后端
吃饱了得干活16 分钟前
从类爆炸到协作——DDD战略设计登场
java·后端·架构
wno70430 分钟前
Spring Boot异常处理
java·spring boot·后端
君顾11 小时前
智慧场馆解决方案小程序系统开发实战指南
java·开发语言·智慧场馆