StringBuilder似乎超出了容量

时间:2013-10-08 13:09:46

标签: android stringbuilder

我的应用程序将VCards检索为字符串,并通过StringBuilder将所有内容放在一个大字符串中

public String getVcardStrings() throws Exception {
    Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    StringBuilder builder = new StringBuilder();
    if (cursor.moveToFirst()) ;
    do {
        String s = getVCardStringFromContact(cursor);
        L.d("VCARD", s);
        builder.append(s);
    } while (cursor.moveToNext());
    cursor.close();

    L.d("VCARD", "Output: \n" + builder.toString());
    return builder.toString();
}

每个getVCardAsString()调用的输出都是正确的。它包含所有数据。但是调用builder.toString()onlly会返回1.5个联系人的vcard数据,这个数据大约是4kb的文本数据,剩下的就是丢失了!

没有例外,我读过StringBuilders的容量理论上达到了4GB。现在我的问题是,这里发生了什么?

1 个答案:

答案 0 :(得分:3)

我很确定这是误报:

换句话说,数据存在,但被logcat截断。 这种观察似乎通过这个定义来验证:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)

这是4KB的爆炸,直接与您的体验有关。

将输出写入文件以检查其实际存在。