超长String接收处理

简介: 111

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


相关文章
|
2月前
|
前端开发 Java API
Spring Boot 整合 x-easypdf:5 分钟搞定 PDF 生成与中文排版
在 Java 开发中,生成 PDF 文档常面临中文乱码、排版困难、依赖库收费等痛点。本文推荐一款基于 PDFBox 深度封装的国产开源神器 —— x-easypdf。它内置中文字体,API 简洁易用,支持组件化开发。本文将通过一个“企业录用通知书生成器”的实战 Demo,带你体验 5 分钟快速实现 PDF 生成的全过程。
350 1
|
机器学习/深度学习 SQL 分布式计算
Spark核心原理与应用场景解析:面试经验与必备知识点解析
本文深入探讨Spark核心原理(RDD、DAG、内存计算、容错机制)和生态系统(Spark SQL、MLlib、Streaming),并分析其在大规模数据处理、机器学习及实时流处理中的应用。通过代码示例展示DataFrame操作,帮助读者准备面试,同时强调结合个人经验、行业趋势和技术发展以展现全面的技术实力。
1560 0
|
消息中间件 存储 负载均衡
|
自然语言处理 开发工具 git
图解Git——变基《Pro Git》
变基(rebase)是Git中用于将一系列提交“重新播放”到另一个分支上的操作,使提交历史更加线性整洁。其基本操作为`git rebase &lt;目标分支&gt;`,可将当前分支的修改基于目标分支重新应用;复杂场景下使用`git rebase --onto &lt;新基底&gt; &lt;旧基底&gt; &lt;分支&gt;`,将特定提交从旧基底移动到新基底。
1151 10
|
SQL 存储 HIVE
hive分区与分桶
hive分区与分桶
766 1
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
356 0
|
存储 NoSQL Redis
RedisTemplate常用方法总结
RedisTemplate常用方法总结
651 0
若依修改标题和icon,在vue.config.js和.env.development进行修改
若依修改标题和icon,在vue.config.js和.env.development进行修改
|
XML 数据格式
restTemplat发post请求报错Content type ‘application/xml;charset=UTF-8‘ not supported“
restTemplat发post请求报错Content type ‘application/xml;charset=UTF-8‘ not supported“
705 1
|
机器学习/深度学习 分布式计算 监控
典型的Spark应用实例
典型的Spark应用实例
853 1

热门文章

最新文章