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

}

目录
相关文章
|
JSON Java Maven
IDEA开发过程中常用插件必备
本文介绍了提升IntelliJ IDEA开发效率的几个插件:Codota用于强大代码补全;Auto filling Java call arguments自动填充函数参数,节省手动填充时间;GsonFormat能快速将JSON转换为Java实体类;Rainbow Brackets帮助识别括号所属代码块;Maven Helper提供高效查看和分析Maven依赖树功能;Key Promoter X提醒使用快捷键代替鼠标操作;最后还分享了如何设置背景图片以提升编码心情。
498 0
idea跳转class文件
idea跳转class文件
312 0
|
测试技术 开发者 Python
pyautogui,一个超酷的 Python 库!
pyautogui,一个超酷的 Python 库!
863 4
CTO:半小时内处理好MyBatisPlus逻辑删除与唯一索引的兼容问题
需求背景 比如有张用户表,在插入或者更新数据的时候,我们需要 用户名称(username),不能重复。 我们首先考虑的是给该字段创建唯一索引
VScode运行代码出现中文乱码的问题
VScode运行代码出现中文乱码的问题
|
Java
JAVA读取EMF文件并转化为PNG,JPG,GIF格式
JAVA读取EMF文件并转化为PNG,JPG,GIF格式
914 0
|
XML Java 应用服务中间件
SpringBoot配置加载,各配置文件优先级对比
SpringBoot配置加载,各配置文件优先级对比
975 0
|
Java Maven
maven 使用国内代理
一直使用 maven默认仓库,maven 的下载速度一直不快不慢;最近换了网络,maven秒变蜗牛,换了阿里云的镜像,瞬间飞快。 配置文件 ${USER_HOME}/.m2/settings.xml: 设置阿里云镜像 alimaven aliyun maven http://maven.
8612 0
|
存储 监控 数据可视化
万字长文简单明了的介绍xxl-job以及quartz
本文主要介绍分布式定时任务框架xxl-job,本文首先会对xxl-job做一个基本的介绍,接着将xxl-job与quartz做一个比较,最后就是介绍xxl-job调度的详细过程。
2019 0
万字长文简单明了的介绍xxl-job以及quartz