超长String接收处理

简介: Java中字符串变量最大长度可达Integer.MAX_VALUE,但字符串字面量受class文件格式限制,理论最大65535,实际仅支持65534。超长字面量编译报错,需通过StringBuilder分段处理,避免“常量字符串过长”问题。

1 背景
String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE了。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。不过这仅仅是对字符串变量而言,
如果是字符串字面量(string literals),如“abc"、"1a2b"之类写在代码中的字符串literals,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
Java
运行代码
复制代码
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
理论上允许的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();

}

相关文章
|
6月前
|
存储 人工智能 安全
从OpenClaw到HiClaw:AI代理架构升级+阿里云零基础部署与避坑实战教程
OpenClaw作为轻量化开源AI代理框架,凭借自然语言交互、技能生态与本地私有化能力快速普及,可完成代码编写、邮件处理、定时任务、仓库操作等复杂任务。但随着使用场景从个人走向团队、从简单任务走向长周期项目,原生架构的短板集中爆发:
1218 6
|
缓存 前端开发 JavaScript
通过jsDelivr实现Github图床CDN加速
jsdelivr是一个免费的公共CDN(内容分发网络)服务,它允许网站开发者将他们的代码库、JavaScript库、字体和其他资源托管在jsdelivr上,并通过jsdelivr的CDN网络进行快速分发。使用jsdelivr可以有效地减少用户下载资源的时间,提高网页加载速度,同时减轻原始服务器的负载。
1365 1
|
SQL Java 开发工具
若依矿建部署教程
若依矿建部署教程
393 0
|
算法 Shell Linux
【Shell 命令集合 文件管理】Linux diff 命令使用教程
【Shell 命令集合 文件管理】Linux diff 命令使用教程
716 0
|
3月前
|
存储 人工智能 运维
基于OpenClaw的阿里云JVS Claw技术详解 架构能力、部署流程与二次开发实操指南
在AI智能体逐步从纯对话交互转向自主任务执行的行业趋势下,具备自动化操作能力的AI执行助理成为个人办公、开发工作、团队协作的重要工具。阿里云JVS Claw是基于OpenClaw开源框架打造的新一代AI智能执行助理,区别于传统对话型AI,它可以作为独立数字员工,在隔离的运行环境中自主完成文档处理、代码编写、网页操作、日程管理等多样化任务。该产品支持云端、本地两种部署模式,搭配可视化运行界面、海量拓展技能与金融级安全隔离机制,兼顾易用性、安全性与拓展性。
352 0
|
机器学习/深度学习 自然语言处理 算法
大模型微调PPO原理——零基础吃透RLHF核心算法
本文通俗解析PPO算法——RLHF微调的核心技术:以“人类反馈→奖励模型→策略优化”三步闭环,辅以“近端约束”保障稳定,让大模型不仅答得对,更答得让人满意。零基础也能轻松理解+上手实操。
|
12月前
|
JSON 数据可视化 API
淘宝/天猫:利用销售数据API生成区域热力图,优化仓储布局
本文详解如何利用淘宝/天猫销售数据API生成区域热力图,结合核密度估计与线性规划,科学优化仓储布局。通过数据驱动降低物流成本15%-20%,提升配送效率,助力电商高效运营。(238字)
|
Java 应用服务中间件 项目管理
Maven详解
Apache Maven是一个强大的Java项目管理和构建工具,它简化了项目结构、依赖管理、构建过程。Maven遵循约定优于配置原则,提供标准项目模板,自动处理依赖下载和版本控制。通过POM(Project Object Model)文件,开发人员声明项目属性、依赖、构建配置等。Maven支持多模块管理、文档生成、版本管理和构建报告。使用Maven,可以更高效地管理复杂项目,避免手动管理依赖带来的问题。此外,Maven的配置文件(settings.xml)允许设置本地仓库、中央仓库镜像和JDK版本等。
1201 117
Maven详解
|
弹性计算 Java 测试技术
提交Flink作业及所见问题总结
提交Flink作业及所见问题总结
|
API Docker 容器
如何免费获取 ChatGPT API Key?
上篇文章介绍了NextChat项目,只需配置ChatGPT API Key即可拥有私人ChatGPT网页应用。本文继续介绍免费获取API Key的来源——GPT_API_free,一个拥有13.6K Star的Github开源项目。需用Github账号绑定领取Key,支持gpt-3.5-turbo、embedding、gpt-4,但gpt-4每天限3次调用。GPT_API_free也提供付费版API,以支持项目持续运营。
10632 0
如何免费获取 ChatGPT API Key?