StringUtil

简介: Java中字符串变量最大长度为Integer.MAX_VALUE,但字符串字面量受限于class文件格式,最大仅65534。超长字符串无法直接作为字面量使用,需通过StringBuilder分段处理,避免编译错误,实现安全拼接与传输。

超长String接收处理
1 背景
String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE了。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。不过这仅仅是对字符串变量而言,
如果是字符串字面量(string literals),如“abc"、"1a2b"之类写在代码中的字符串literals,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
理论上允许的string literal的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误了。
2 问题描述
问题的关键就在于,不管从Http还是RPC等协议中,我们都没办法直接用字符串字面量去直接接收,即:
String result = **,因为这样会直接报错:常量字符串过长
所以需要将数据进行分组处理
3 解决方案
private String getOutOfMaxLengthStr() {

StringBuilder sb = new StringBuilder();
sb.append("65535长度字符串");
sb.append("65578长度字符串");

json.put("test", sb.toString());

// 总字符串长度
int length = json.get("test").toString().length();

// 整数组
int size = length / 65534;

// 最后一组起始脚标
int lastLength = (65534 * size);

// 分组追加
StringBuilder sbuffer = new StringBuilder();
for (int i = 0; i < size; i++) {
    String str = json.get("test").toString().substring(65534 * i, 65534 * (i + 1));
    sbuffer.append(str);
}

// 最后一组
String lastStr = json.get("test").toString().substring(lastLength, length);
sbuffer.append(lastStr);

return sbuffer.toString();

}

目录
相关文章
|
2天前
|
敏捷开发 测试技术 持续交付
微服务技术栈
单元测试是保障代码质量的基石。它快速、稳定,能精准定位问题,提升代码可维护性与团队协作效率。通过“测试金字塔”模型,单元测试作为底层支撑,占比应达80%。相比端到端测试,它显著降低维护成本,助力持续交付。写单测不是踩刹车,而是为软件研发提速。
41 9
|
1天前
|
Java 大数据 Apache
Excel工具-HUTOOL-输出Excel
基于Hutool与Apache POI,封装Excel写入功能,提供ExcelWriter和BigExcelWriter,支持List、Map、Bean等数据类型导出,可自定义样式、多Sheet操作,并避免内存溢出,适用于高效生成Excel文件及Web下载场景。
7 0
|
1天前
|
Apache
Excel工具-HUTOOL-读取Excel
基于Hutool和Apache POI,封装Excel读取工具,支持读取为List、Map或Bean;提供SAX模式高效解析大文件,避免内存溢出,适用于Excel 2003/2007格式,支持按行处理数据。
7 0
|
1天前
HUTOOL-Word生成-Word07Writer
Hutool封装POI实现Word文档生成,提供Word07Writer类便捷创建docx文件。支持自定义字体、段落内容,适用于简单文档导出。需引入hutool-all与poi-ooxml依赖。
2 0
|
1天前
|
缓存 Java 开发工具
QLExpress使用及源码分析
QLExpress是阿里巴巴开源的轻量级规则引擎,支持通过YAML配置规则脚本,结合注解实现Java方法与表达式映射。通过别名机制、AST解析和上下文赋值,实现灵活的动态逻辑执行,适用于复杂业务规则场景。
6 0
|
1天前
Activiti工程分享
本系列包含两个Activiti实战项目:1)ActivitiDemo,快速上手教程与基础示例;2)Activiti,完整审批流程源码,涵盖流程设计、任务审批、监听器等核心功能,助你高效掌握工作流开发。
3 0
|
1天前
|
存储 API 数据库
Activiti框架拓展
Activiti表结构以ACT_开头,分五类:ACT_RE_*存流程定义与资源;ACT_RU_*存运行时实例、任务与变量;ACT_HI_*存历史数据;ACT_ID_*管理用户组及权限;ACT_GE_*存通用二进制与属性数据,支撑流程引擎高效运作。
6 0
|
1天前
|
数据可视化 Java 关系型数据库
认识Activiti
工作流指如请假、报销等需审批的流程,通过引擎实现可视化与自动化。常见技术有BPMN、Activiti、Flowable等,广泛应用于CRM、TMS、WMS等系统,支持单/多节点复杂审批,提升业务效率与管理规范性。(238字)
9 0
|
1天前
|
监控 Java 调度
定时任务概述
定时任务指通过时间表达式调度执行的任务,适用于定时对账、超时取消等场景。实现方式包括单体架构的轮询、Timer、ScheduledExecutorService、Quartz、SpringTask,以及分布式架构下的TBSchedule、Elastic-Job、XXL-JOB等方案,解决集群重复执行、动态调度、故障转移等问题。
14 0
|
1天前
服务暴露总结
本文深入解析服务暴露的核心原理,涵盖本地与远程暴露流程,阐明“Service→Invoker→Exporter”的关键链路,辅以图示帮助理解,为后续学习奠定基础。
4 0