Java “constant string too long” 编译错误
这个问题是编译时错误,在 Java 的运行时没有这个限制。
当我们在 Java 编译器中输入的变量值超过 64 KB 的话,Java 编译器是不会让编译通过的,你将会得到一个 constant string too long” error from the compiler 错误。
在本文中,我们将会对这个问题的原因进行解释和如何解决这个问题。
问题描述
首先让我们在本地的计算机中重复这个问题,在下面的代码中,插入一个超长的字符串。
@Test
public void whenDeclaringTooLongString_thenCompilationError() {String stringTooLong = "stringstringstring ... 100,000 characters ... string"; assertThat(stringTooLong).isNotEmpty();
}
上面输入的字符串超过了 100,000 个字符。因为我们是为了测试使用的,你可以在代码中输入任何很长的字符。
有时候你的 IDE 可能不会提示这个错误,但是我们测试的 IEDA 是没有问题的,这个错误能够完全提示出来。
当然可以使用 maven 来进行编译,相同的代码,如果使用 Maven 进行编译的提示如下:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:06 min
[INFO] Finished at: 2022-08-06T09:34:08-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:testCompile (default-testCompile) on project core-java-strings: Compilation failure
[ERROR] /D:/WorkDir/Repository/GitHub/cwiki-us-docs/java-tutorials/core-java-modules/core-java-strings/src/test/java/com/ossez/stringtoolong/StringTooLongUnitTest.java:[16,32] constant string too long
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :core-java-strings
在使用 UTF-8 编码的时候,类文件的字符被限制在 2^16 bytes。
问题解决
因为这个问题是编译时错误,不是运行时问题。
解决这个问题的办法也就非常简单了,如果你需要处理超长的字符串的话,我们可以使用 FileInputStream 的方法来进行处理。
将需要处理的字符串放到文件中就可以了。
然后让你的程序从文件中把数据读出来。
如下面的代码所示:
@Test
public void whenStoringInFileTooLongString_thenNoCompilationError() throws IOException {FileInputStream fis = new FileInputStream("src/test/resources/stringtoolong.txt");String stringTooLong = IOUtils.toString(fis, "UTF-8");assertThat(stringTooLong).isNotEmpty();
}
当然你也可以定义成一个属性文件中的值,这样的话,你可以通过读取属性文件方法把这个值取出来。
这种方法和上面一种方法的本质是一样的,就是用文件来替换掉。
@Test
public void whenStoringInPropertiesString_thenNoCompilationError() throws IOException {try (InputStream input = new FileInputStream("src/main/resources/config.properties")) { Properties prop = new Properties();prop.load(input);String sValue = prop.getProperty("stringtoolong");assertThat(sValue).isNotEmpty();}
}
然后尝试对上面的代码再次进行重新编译,有关这个字符串过长的错误就解决了。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.433 s
[INFO] Finished at: 2020-03-14T18:23:54+01:00
[INFO] ------------------------------------------------------------------------
当然,你也可以使用字符串拼接的方式,将希望处理的字符串进行拼接。
但并不十分推荐使用这种方法来进行处理。
结论
在本文中,我们对 constant string too long 编译错误进行了说明,并且提供了解决的方法。
简单来说就是使用文件来进行替换。
测试源代码
相关的测试源代码,请访问:
https://src.ossez.com/cwiki-us-docs/java-tutorials/src/branch/main/core-java-modules/core-java-strings/src/test/java/com/ossez/stringtoolong/StringTooLongUnitTest.java
您也可以 Fork 代码后提交更新。
Java “constant string too long” 编译错误 - Java - OSSEZ这个问题是编译时错误,在 Java 的运行时没有这个限制。 当我们在 Java 编译器中输入的变量值超过 64 KB 的话,Java 编译器是不会让编译通过的,你将会得到一个 constant string too long” error from the compiler 错误。 在本文中,我们将会对这个问题的原因进行解释和如何解决这个问题。 问题描述首先让我们在本地的计算机中重复这个问题,在下面的代码中,插入一个超长的字…https://www.ossez.com/t/java-constant-string-too-long/14048
Java “constant string too long” 编译错误相关推荐
- Error:java: 无效的标记 -version 编译错误的解决办法
创建新项目,在启动的时候遇到了 Error:java: 无效的标记: -version 这个报错信息 截图如下: 说是在编译的时候遇到了问题,所以我check了下maven配置,Settings里的 ...
- java强制编译通过_强制java使用用户输入作为消息进行编译错误
我不知道在Java中是否可行: 我想从用户(从System.in)获得输入,然后使用该输入引发编译错误. 我的意思是,如果用户输入了文本" HELLO",则程序应引发编译错误:编译 ...
- java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...
解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...
- java编译报错提示编码gbk的不可映射字符啥意思_解决java编译错误:编码GBK的不可映射字符...
[我的Android进阶之旅]解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符 1.问题描述 最近在负责公司基础业务和移动基础设施的开发工作,正在负责L ...
- java程序编译错误属于异常吗_“Cannot find symbol”编译错误是什么意思?
"Cannot find symbol"编译错误是什么意思? 1."Cannot find symbol"错误是什么意思? 首先,它是编译错误1.这意味着,无论 ...
- java code large_Java中的“代码太大”编译错误(“Code too large” compilation error in Java)...
Java中的"代码太大"编译错误("Code too large" compilation error in Java) Java中的代码是否有最大大小? 我写 ...
- PAT提交JAVA代码编译错误
这是我在PAT在提交java代码时的一种编译错误,如下图所示 这种编译错误主要是由于在提交Java代码d的过程中格式出现错误,只需要在class后面的类名改成"Main"就可以了, ...
- Eclipse Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案
Eclipse Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案 参考文章: (1)Eclipse Maven 编译错 ...
- java编译错误 程序包javax.servlet不存在javax.servlet.*
java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...
最新文章
- 不同版本gene ID比较
- 信息安全系统设计基础学习总结第二周
- JS动态获取当前时间
- visualstudio2015无法打开包括文件stdio.h等
- 链表的基本操作——反转与删除
- 一张图学会Xmind创建思维导图【转载】
- webpack打包原理_对于webpack打包原理你知道有多少?
- Python 读入Excel表时如何判空NaN
- spring之IOC和DI关系
- Windows10鼠标光标及浏览器点击效果【win10美化】
- tkmybatis能连接oracle吗,《放弃Mybatis使用tkMybatis》
- 教你用Python 做PPT之制作动态图~做出来的效果高级又好看
- HIVE优化系列(1)-- 自动合并输出的小文件
- 网络爬虫之东方财富网股票板块
- 又一神作。Alibaba“M8级”架构师总结微服务与事件驱动架构启蒙手册
- overflow溢出处理
- 繁花盛开的夏天读后感
- 计算机应用基础在线试题,计算机应用基础试题.DOC
- 计算机应用基础网络统考t4,华南理工大学2019秋-计算机应用基础_随堂练习
- string数据库使用和实践第一部分string数据库介绍
热门文章
- 数字IC设计笔试题汇总(一)
- 如何优雅地给妹子优化电脑(Windows)?
- 图像采集卡的概念及作用原理
- 数字图像处理第九章 形态学图像处理
- 计算机论文免费模板,1.计算机专业毕业论文模板
- 联想台式修复计算机,联想台式电脑一键恢复5.0与Vista SP1兼容性问题预防及解决方案...
- Microsoft Windows Win32k本地提权漏洞分析
- scala-第六章-Rational
- 大话数据结构 摘录 第一章 数据结构绪论
- 微软旗下GitHub宣布裁员10%;谷歌高管警告:AI聊天机器人会产生错觉;华为称在ChatGPT领域早有布局丨每日大事件...