StringUtil

简介: Java中字符串变量最大长度为Integer.MAX_VALUE,但字符串字面量受限于常量池,最大仅65534。超长字符串无法直接使用字面量接收,否则编译报错。解决方案:通过StringBuilder分段处理,将超长字符串拆分为多段拼接,避免超出限制,适用于HTTP、RPC等场景的数据接收与处理。

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

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();

}

相关文章
|
存储 SQL 大数据
列式存储系列(一)C-Store
列式存储系列(一)概述 序 本文是列式存储系列的第一篇。在这个系列中,我们将介绍几个典型的列式存储系统。这些列式系统的出现都有各自的时代背景。在介绍这些系统的同时,我们也尽量介绍一下它们的背景,以便大家有一个更宏观的认识,理解这个系统为什么会出现,它要解决的问题,以及它如何影响后来类似系统的发展。
3812 0
|
前端开发 测试技术 程序员
告别手动填参数!Apipost黑科技让接口调试效率翻倍
参数处理是接口调试中的痛点,传统开发流程中占用了开发者大量时间。文章通过程序员小王的故事引出问题,详细介绍Apipost在动态构造接口签名、中文转义参数自动化、金融级数据安全测试和电商库存测试四个场景下的解决方案。此外,还深入讲解了项目级自定义函数的创建与使用,帮助开发者实现从手动处理到智能编排的跃迁,提升效率并减少错误。
|
8月前
|
JSON Java 数据格式
SpringBoot使用汇总
本课程系统讲解Spring Boot核心知识,涵盖环境搭建、JSON处理、日志配置、全局异常处理、AOP切面编程及MyBatis、Redis等主流框架集成,并结合实际项目搭建完整开发架构,助你快速掌握微服务开发技能。
|
7月前
|
存储 人工智能 IDE
AI Coding 长文分享:如何真正把工具用起来,从原理到实践
本文从原理到实践系统地分享了如何高效使用AI编程工具。涵盖其底层机制(如Token计算、工具调用、Codebase索引与Merkle Tree)、提升对话质量的方法(如规则设置、渐进式开发)、实际应用场景(如代码检索、绘图生成、问题排查),并推荐了结合AI的编码最佳实践,包括文档、注释、命名规范和安全合规,旨在帮助不同经验水平的开发者真正把AI工具用好。
AI Coding 长文分享:如何真正把工具用起来,从原理到实践
|
8月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。前者是跨模型的标准协议,实现多工具动态集成;后者是模型调用外部功能的机制。MCP构建通用连接桥梁,支持跨平台、热插拔与细粒度管控,适用于复杂企业场景;Function Call则轻量直接,适合单模型快速开发。二者可协同工作:模型通过Function Call解析意图,转为MCP标准请求调用工具,兼顾灵活性与扩展性。未来将趋向融合,形成“解析-传输-执行”分层架构,推动AI应用标准化发展。
|
SQL Oracle 算法
|
8月前
|
监控 Java 测试技术
OOM排查之路:一次曲折的线上故障复盘
本文记录了一次线上服务因Paimon数据湖与RocksDB集成引发的三次内存溢出(OOM)故障排查全过程。通过MAT、NMT、async-profiler等工具,结合监控分析与专家协作,最终定位到RocksDB通过JNI申请的堆外内存未释放是根源。团队通过架构优化,改由Flink统一写入Paimon,彻底解决问题。文章系统梳理了排查思路与工具使用,为类似技术栈提供宝贵经验。
|
SQL Oracle 关系型数据库
OceanBase数据库
OceanBase数据库
1270 1