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

}

目录
相关文章
|
Java Maven
maven 使用国内代理
一直使用 maven默认仓库,maven 的下载速度一直不快不慢;最近换了网络,maven秒变蜗牛,换了阿里云的镜像,瞬间飞快。 配置文件 ${USER_HOME}/.m2/settings.xml: 设置阿里云镜像 alimaven aliyun maven http://maven.
8784 0
|
7月前
|
弹性计算 测试技术 API
阿里云ECS付费类型全解析:包年包月/按量付费/抢占式实例/节省计划怎么选省钱?
本文详解阿里云ECS四大付费模式:包年包月(稳定业务高性价比)、按量付费(弹性应对波动)、抢占式实例(低成本临时算力)、节省计划(按量折扣升级)。对比核心优势、适用场景与注意事项,提供选型建议与成本优化技巧,助您精准匹配业务需求,实现成本与灵活性最优平衡。
442 1
|
9月前
|
JSON Linux 数据格式
Registry搭建docker私仓
Docker Registry是官方提供的私有镜像仓库构建工具。通过拉取registry镜像并运行容器,可快速搭建私服。需配置daemon.json启用http支持,重启Docker后,使用tag和push命令上传镜像,通过curl验证内容,实现私有化镜像管理。
298 0
|
9月前
|
安全 Linux Shell
Docker镜像
镜像是包含软件运行所需代码、依赖库、配置等的轻量级可执行包。Docker利用联合文件系统实现分层结构,通过bootfs和rootfs构成镜像底层,支持镜像共享与复用。容器启动时在镜像顶层添加可写容器层,所有修改仅作用于该层,保障镜像安全与高效。
206 0
|
9月前
|
Java 大数据 Apache
Excel工具-HUTOOL-输出Excel
基于Hutool与Apache POI,封装Excel写入功能,提供ExcelWriter和BigExcelWriter,支持List、Map、Bean等数据类型导出,可自定义样式、多Sheet操作,并避免内存溢出,适用于高效生成Excel文件及Web下载场景。
453 0
|
9月前
|
XML 存储 SQL
SpringBoot整合Logback,滚动记录+多文件
logback-spring.xml配置文件实现日志分级输出,支持控制台、文件滚动存储,按模块(如SQL、支付、任务等)分离日志,通过LogProxy获取指定名称的Logger,便于定位问题。配置灵活,适用于多环境部署。
179 0
|
9月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
本文介绍Nexus Repository Manager OSS在Linux环境下的安装与配置,包括JDK8安装、Nexus部署、仓库管理、用户权限设置及密码重置方法。支持通过Docker快速部署,并实现数据持久化。同时涵盖Maven、NPM、Docker等组件的私服搭建与资源上传下载配置,助力企业构建高效私有仓库体系。(239字)
771 0
|
9月前
|
存储 Ubuntu Shell
容器命令
`docker run` 命令用于创建并启动容器,支持交互式(-it)和守护式(-d)运行。常用参数包括:--name(命名)、-p(端口映射)、-v(数据卷挂载)、-e(环境变量)等。可通过 `docker start/stop/restart` 控制容器状态,`docker exec` 进入运行中容器,`docker commit` 将容器保存为新镜像。数据卷实现持久化存储,支持容器间共享。
426 0
|
测试技术 开发者 Python
pyautogui,一个超酷的 Python 库!
pyautogui,一个超酷的 Python 库!
1264 4

热门文章

最新文章