StringUtil

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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();

}

相关文章
|
2天前
|
Java
@Inherited
@Inherited用于注解,使子类继承父类中标记该注解的元数据。仅在类继承中有效,接口间或实现接口时不生效。
|
2天前
|
JSON Java 数据格式
SpringBoot使用汇总
本课程系统讲解Spring Boot核心知识,涵盖环境搭建、JSON处理、日志配置、全局异常处理、AOP切面编程及MyBatis、Redis等主流框架集成,并结合实际项目搭建完整开发架构,助你快速掌握微服务开发技能。
|
2天前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布与运维。涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理、一键发布及回滚机制,并结合Skywalking实现日志链路追踪,提升问题定位与修复效率,助力企业级DevOps落地。
|
1天前
|
安全 Java 开发工具
工程搭建与验证
本教程介绍如何搭建工程并整合SpringSecurity,通过引入依赖、启动验证,实现登录安全控制。默认账户为user,密码由系统生成并每次重启后变化。访问受保护路径将自动跳转至登录页,成功登录后重定向至原请求页面。完整代码详见GitHub仓库及指定分支。
|
1天前
|
安全 Java 应用服务中间件
实现权限管理的技术
权限管理技术选型需综合考量。常见方案包括Apache Shiro(轻量易用,但安全性弱)、Spring Security(功能强大、防护全面,但配置复杂)及自定义ACL(契合业务但维护成本高)。多数框架基于ACL或RBAC模型封装,应根据项目规模与架构合理选择。
|
1天前
|
安全 Java 数据安全/隐私保护
通用权限管理模型
本文介绍ACL与RBAC两大核心权限模型。ACL通过用户/角色直接授权,简单直观;RBAC则基于角色分配权限,支持角色继承、职责分离等机制,更适用于复杂系统。还简要提及DAC、MAC、ABAC等模型,帮助读者建立权限管理的全局认知。
|
1天前
|
安全 数据安全/隐私保护 微服务
什么是权限管理
权限管理包含认证与授权两大核心。认证验证用户身份,确保合法登录;授权则依据角色分配资源访问权限,实现菜单差异化展示。通过ACL、RBAC等模型构建用户、角色、权限间关系,保障系统安全,防止数据泄露与操作越权,是微服务架构中不可或缺的基础模块。
|
1天前
|
JSON 安全 Java
鉴权
本文介绍基于Spring Security与JWT实现客户端Token认证方案,涵盖Token生成、验签、权限控制全流程。通过WebSecurityConfig配置安全规则,结合JWTLoginFilter与JWTAuthenticationFilter实现登录认证与请求拦截,利用自定义验证组件完成用户身份校验,并通过RBAC模型实现细粒度权限管理,构建安全的Spring Boot应用防护体系。
|
1天前
|
Web App开发 安全 JavaScript
跨域处理
本文介绍了Web开发中的跨域问题及解决方案。当协议、域名或端口不同时,浏览器因同源策略阻止资源访问。通过CORS(跨域资源共享)机制,使用`@CrossOrigin`注解、全局配置`WebMvcConfigurer`或自定义过滤器添加响应头,可实现安全的跨域请求。
|
1天前
|
XML 运维 Java
打包
本项目通过Maven构建,使用Spring Boot插件将应用打包为可执行JAR文件,配置主类并支持一键启动。通过`mvn clean package`命令打包,`java -jar`运行(支持前台/后台),`kill -9 pid`停止服务。支持全JAR集成或分离JAR、依赖与配置文件部署,灵活适用于不同环境,便于运维管理。