android - StringBuilder 似乎超出了容量

标签 android stringbuilder

我的应用程序将 VCard 作为字符串检索,并通过 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() 只返回 1,5 个联系人的 vcard 数据,大约 4kb 的文本数据,其余的就丢失了!

毫无异常(exception),我读到 StringBuilders 的容量理论上可达 4GB。现在我的问题是,这里发生了什么?

最佳答案

我很确定这是误报:

换句话说,数据在那里,但被 logcat 截断了。 这个观察似乎可以通过这个定义得到验证:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)

这是 4KB 的大小,与您所经历的直接相关。

将输出写入文件以检查其是否确实存在。

关于android - StringBuilder 似乎超出了容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19248599/

相关文章:

java - 如何在 parse.com 数据库中追加列

android - 在 Android 的 okhttp 中向 GET 请求添加查询参数

c# - stringBuilder碎片化如何解决?

java - Sonar 提示: use StringBuilder instead of StringBuffer

memory-management - InplaceStringBuilder 和 StringBuilder 有什么区别?

android - Genymotion 无法安装 gapps

android 比例动画突然恢复到原始大小

android - 音频记录缓冲区大小

c# - 在 C# 中,检查 stringbuilder 是否包含子字符串的最佳方法

Java StringBuilder(StringBuffer) 的 ensureCapacity() : Why is it doubled and incremented by 2?