【发布时间】:2015-01-27 14:37:04
【问题描述】:
我想通过使用 ByteBuffer 代替 String 来优化我的代码。我得到的是字符串 []。我正在对它的每个元素进行格式化。
例如String strAry[] = {"Help", "I", "am", "trapped", "in", "a", "fortune", "cookie", "factory"};
是我的字符串数组,我正在将它的内容写入 .csv 文件 格式 "StrArray[0]";"StrArray[1]";"StrArray2";"StrArray[3]";等等……
它在内部创建多个字符串,并且这段代码在一段时间内循环运行了数十万次。
我想实现ByteBuffer。在创建时
ByteBuffer bbuf = ByteBuffer.allocate(bufferSize);我需要在这里指定缓冲区大小。
我不想遍历 String [] 的每个元素来计算它的 byteSize。
感谢任何帮助。
【问题讨论】:
-
而且你不能使用StringBuffer来完成这项工作?
-
是的,我可以,但是当这个过程运行多次时。创建了 n 个 StringBuffers,最后我需要将其转换为 String,因此在单次运行中,一个 StringBuffer 和一个 String 被创建,这是内存消耗过程。
-
由于对象内存的性质,某处的东西需要遍历字符串数组以获得每个字符串的字节大小,因为这不是已知的信息在数组的级别;使用 StringBuffer 可能是最好的,但如果您专门使用 ByteBuffer,则需要遍历所有字符串并求和它们的字节大小。
-
目前还不清楚为什么使用 ByteBuffer,甚至 StringBuffer 或 StringBuilder BTW,对创建 CSV 文件很有用。这肯定看起来像是不必要的过早优化。写入文件比处理内存中的字符串慢几个数量级。所以优化字符串处理可能不会导致任何显着差异。
-
@JBNizet 我需要写入 csv 文件的数据还没有准备好转储到文件中。我正在使用不同的参数逐行创建文件的内容,其中包括很多字符串操作。此过程重复数千行。我正在尝试优化我的程序以使用更少的内存并最小化垃圾收集过程。
标签: java arrays string bytebuffer