java.lang.StringBuffer 可以被 ColdFusion 中的“常规”字符串操作逻辑替换吗?

2023-12-13

我不是 Java 专家;我希望这个列表中更精通 Java 的人可以帮助我。

我当前的服务器上有以下代码。

<cfset var buffer = CreateObject("java", "java.lang.StringBuffer").init("") />
<cfset buffer.append(variables.myVar) />

我正在尝试将这些代码移动到另一台服务器。问题是这个新服务器(共享主机)不允许调用 Java 对象。所以,我将它们更改为以下内容。

<cfset var buffer = "" />
<cfset var buffer = buffer & variables.myVar />

我的问题是,新代码与旧代码等效吗?使用java.lang.StringBuffer有什么优点?

提前致谢, 蒙特


不,“新”代码在重循环中使用时效率较低。

您可以使用数组来模拟 StringBuffer。

<cfset var buffer = ArrayNew(1)>
<cfset ArrayAppend(buffer, variables.myVar1)>
<cfset ArrayAppend(buffer, variables.myVar2)>
<!--- more of these --->
<cfset result = ArrayToList(buffer, "")>

但是:如果您不连续连接数百或数千个字符串,则使用 StringBuffer 几乎没有什么好处。你可以去&在多数情况下。


我已经做了一些测试(在带有 Java 1.4 的 ColdFusion 7 服务器上,较新的版本可能得分不同)。

所有时间均以毫秒为单位。结果是 10 次重复的平均值(方括号中的那个除外,因为这实际上需要很长时间)。

以下是迭代连接的测量一个字母N次。



iterations   concat   array   cfsave   string
                             content   buffer
       100        0       0        0        2
      1000        4       4        2       22
     10000      168      29       33      219
    100000   30,781     168      293    1,575
  

以下是迭代连接的结果长度为 10 的字符串N次:



iterations   concat   array   cfsave   string
                             content   buffer
       100        0       0        0        4
      1000       25       0        2       24
     10000    1,242      33       31      232
    100000 [410,979]    180      373    2,082
  

请注意,迭代次数越多,字符串越长,基本字符串连接的效率就会迅速降低。其他方法显示出更多的线性行为。

进一步请注意,StringBuffer 的性能也与其初始大小相关。如果您将其尺寸设置得太小(即通过调用init("")代替.init(10000),例如),然后在空间用完时被迫重新分配更多空间,这也需要时间。为了进行测试,我用它所需的空间量对其进行了初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.StringBuffer 可以被 ColdFusion 中的“常规”字符串操作逻辑替换吗? 的相关文章

随机推荐