小编dat*_*tsb的帖子

如何实现一个LIMITLESS String和StringBuilder

Java的String和StringBuilder的长度限制为Integer.MAX_VALUE。在大多数用例中,这绰绰有余,但是我刚遇到一个用例,需要处理并返回大于2,684,354,560个字符的String。

这对于捕获传入的字符流是必需的,在该字符流中,我无法控制字符流的大小,也无法选择重新设计解决方案。我最多只能做的是替换现有模块中的方法,或引入一个新类替换该方法中的String和StringBuilder。

作为临时的解决方法,为防止在StringBuilder长度超过Integer.MAX_VALUE时抛出OutOfMemory异常,我实现了以下safeAppend():

    private void safeAppend(StringBuilder ret, String current) {
        if ((long)ret.length() + current.length() > Integer.MAX_VALUE) {
            String truncateLeadingPart;
            if (current.length() < ret.length()) {
                truncateLeadingPart = ret.substring(current.length());
            }
            else {
                int startIndex = (int)((long)ret.length()+current.length()-Integer.MAX_VALUE);
                truncateLeadingPart = ret.substring(Math.min(ret.length(), startIndex));
            }
            ret.setLength(0);
            ret.append(truncateLeadingPart);
        }
        ret.append(current);
    }

Run Code Online (Sandbox Code Playgroud)

此方法会截断开头部分,并始终保留尾随的2147483483647个字符。但是,这种解决方法/保障措施不足以解决当前的任务,因为我们无法承受丢失从流中捕获的任何数据的风险。

什么是实现一个推荐的做法StringStringBuilder那些不局限于由一个int最大尺寸?

一个长的最大大小的限制可能就足够了。同样,LimitlessString可以像这样有效地附加一个类StringBuilder

java

3
推荐指数
1
解决办法
91
查看次数

'Array =&gt; [...]'表示什么意思

在要求我维护的一些Perl代码中,我遇到了以下构造:

myArray => ['id1', 'id2', 'id3', 'id4']
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了一些定义/解释,但我所能找到的只是对标量哈希的引用:

https://www.guru99.com/perl-tutorials.html

这是我遇到的实际代码的片段:

$config = eval {
    XMLin(
        $inFile,
        MyArray => [
            'id1', 'id2',"id3", 'id4'
        ]
    );
};
Run Code Online (Sandbox Code Playgroud)

散列整个数组(不包含散列值)的语法是什么意思?

arrays perl

0
推荐指数
1
解决办法
54
查看次数

标签 统计

arrays ×1

java ×1

perl ×1