我有代码试图附加2个SttringBuffers:
logBuf.append(errStrBuf);
在日志中,我看到以下跟踪:
java.lang.StringIndexOutOfBoundsException: String index out of range: 90
at java.lang.AbstractStringBuilder.getChars(AbstractStringBuilder.java:325)
at java.lang.StringBuffer.getChars(StringBuffer.java:201)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:404)
at java.lang.StringBuffer.append(StringBuffer.java:253)
我无法理解问题的原因。
你能举例说明常量吗?
它可以与并发相关吗?
你能提出解决方案吗?
答案 0 :(得分:3)
是的,它可能与并发有关。根据{{3}}:
此方法在此(目标)对象上同步但不同步 同步源(sb)。
因此,如果在此过程中更改errStrBuf
,则可能会产生此错误。自己同步,如下:
synchronize (errStrBuf) {
logBuf.append(errStrBuf);
}
在errStrBuf
被更改的任何地方使用相同的同步块。
答案 1 :(得分:1)
围绕Java源代码展示了StringBuffer.append(StringBuffer sb)
AbstractStringBuilder.append(StringBuffer sb)
代表到 // Length of additional sb.
int len = sb.length();
// Make sure there's room.
ensureCapacityInternal(count + len);
// Copy them through.
sb.getChars(0, len, value, count);
这样做:
StringBuffer.getChars
AbstractStringBuilder
代表再次getChars
代表,public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
{
if (srcBegin < 0)
throw new StringIndexOutOfBoundsException(srcBegin);
if ((srcEnd < 0) || (srcEnd > count))
throw new StringIndexOutOfBoundsException(srcEnd);
if (srcBegin > srcEnd)
throw new StringIndexOutOfBoundsException("srcBegin > srcEnd");
System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
}
看起来有点像:
srcEnd > count
请注意,您的 String索引超出范围:90 因此必须是len
返回true。因此,附加的字符串现在比传递的git remote add prv <url of prv.project.repository.bare>
git fetch prv
git checkout prv/<branch_name> -- project_1
短。很显然,它必须被另一个问题所打动。