超长String接收处理

简介: Java中字符串变量最大长度为Integer.MAX_VALUE,但字符串字面量受限于class文件格式,最大长度为65534。超过此长度会导致编译错误。解决方案是通过StringBuilder分段处理长字符串,避免使用超长字面量。

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

}

相关文章
|
Web App开发 存储 网络协议
chrome命令行参数
chrome命令行参数
727 0
|
人工智能
AI背景颜色变成白色了怎么恢复灰色?
一些刚开始使用AI来做平面设计的朋友,有时候会突然工作界面变成白色,而设置里看了是灰色,然后怎样都调不回来了。贴吧里一篇文章介绍用CTRL+SHIFT+H,实际上这是隐藏画板的快捷键并没有解决问题。
AI背景颜色变成白色了怎么恢复灰色?
|
10月前
|
Linux 数据安全/隐私保护
Kali Linux镜像安装全流程!手把手教你从镜像到开机(附避坑指南)
本指南详解Kali Linux系统安装全流程:从下载镜像、用Rufus制作U盘启动盘,到BIOS启动设置、中文界面安装配置(含分区、root密码、GRUB引导),再到首次登录与必备的`apt update && apt full-upgrade`系统更新,步骤清晰,新手友好。(239字)
4681 2
|
Java 文件存储 Spring
轻松实现Spring Boot与FastDFS的无缝整合
家人们啦!,上篇文章了,我们讲了如何使用docker-compose快速部署fastdfs,在今天的文章中,我将向大家介绍如何将Spring Boot与FastDFS进行无缝整合,以便高效地管理和操作文件存储。通过这个整合,你将能够轻松地在Spring Boot应用程序中实现文件的上传和下载等功能。让我们开始吧
1103 0
轻松实现Spring Boot与FastDFS的无缝整合
|
存储 监控 数据挖掘
云MES:数字化转型的引擎,企业上云的强力推手
云MES系统与企业上云的紧密合作,使得企业能够更加灵活地应对市场变化,快速响应客户需求。无论是新产品的快速研发与上市,还是生产线的快速调整与优化,云MES系统都能提供强有力的支持,助力企业在激烈的市场竞争中占据先机。
1142 10
云MES:数字化转型的引擎,企业上云的强力推手
|
11月前
Excel工具-HUTOOL-读取Excel
Hutool提供ExcelReader封装,支持读取Excel为Map、Bean或列表。针对大文件,提供Excel03SaxReader和Excel07SaxReader,基于SAX模式避免内存溢出,支持按行处理数据,适用于大数据量的高效读取。
|
安全 开发工具 git
如何使用分支回滚代码?
如何使用分支回滚代码?
1749 57
|
11月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题。通过`thread`定位高耗能线程,`watch`监控方法调用与异常,结合`jad`反编译与`redefine`实现热更新,无需重启服务即可修复代码,提升线上问题响应效率。适用于SpringBoot + JDK8环境。
|
11月前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
11月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过YAML配置表达式规则。支持AST语法树解析、上下文构建与动态执行,提供脚本缓存、别名映射、指令重写等扩展能力,适用于灵活的业务逻辑解耦与动态化控制。