我只能想到一件事,那就是用CharBuffer
.出于效率考虑,我总是先计算出正确的大小,然后再进行复制.任何执行多个拷贝和/或字符串处理的解决方案都将效率低下.
当然,我不能保证它不会在CharBuffer#put
方法中的某个地方使用System.arrayCopy
.我强烈期望它在内部使用System.arrayCopy
或类似的代码.这可能适用于这里提供的大多数解决方案.
CharBuffer fullBuffer = CharBuffer.allocate(listOfCharArrays.stream().mapToInt(array -> array.length).sum());
listOfCharArrays.forEach(fullBuffer::put);
char[] asCharArray = fullBuffer.array();
如果可以估计最大大小,当然可以通过使用足够大的缓冲区来避免第一次大小计算,但这需要另一份数据副本;100 simply returns the backing array,这意味着数据is copied only once.
请注意,如果要使用面向对象代码,也可以直接使用CharBuffer
.请注意,您需要确保在写入后将其设置为flip
,并且CharBuffer
是可变的(您可以使用duplicate
或asReadOnly
方法传递副本).
Buffer
和Java NIO类稍微有点难理解,但一旦理解了,您就会从中获得很大的好处,例如在CharEncoder
中使用它们.