StringBuffer wrappenden CharBuffer wiederverwenden

Schnoogle

Mitglied
Hallo,

ich schreibe gerade ein Programm, dass aus mehreren QueryTables jeweils für einen QueryTable eine CSV-Datei direkt in einem ZIP-Archiv erstellt. Dabei enthält die Datenbankabfrage hauptsächlich double-Werte.

Ich habe mir nun Testweise eine Implementierung erstellt, in der ich das Formattieren mit DecimalFormat selbst implementiert habe und einer Implementierung in der ich auch das Encoding anstelle mit OutputStreamWriter mit CharsetEncoder selbst implementiert habe.

Für jeden einzelnen double-Wert habe ich einen Ablauf folgender Methoden:

Code:
//...

ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray);

//...
//begin: Für jeden double-Wert
StringBuffer stringBuffer = decimalFormat.format(number, stringBuffer, fieldPosition);
CharBuffer charBuffer = CharBuffer.wrap(stringBuffer);
CoderResult coderResult = charsetEncoder.encode(charBuffer, byteBuffer, true);
assert(coderResult.isUnderflow());
stringBuffer.setLength(0);
writer.write(byteArray);
byteBuffer.rewind();
//end: Für jeden double-Wert.

Hierbei habe ich StringBuffer verwendet, obwohl hier synchronisations-Overhead entsteht. Ich wollte jedoch nicht, dass für jeden der sehr vielen (!!!) double-Werte ein neuen String-Objekt erstellt wird.

Ich habe jedoch noch ein Problem, dass ich nicht sauber lösen kann bzw. das den ganzen Aufwand evtl. nicht mehr rechtfertigt. Ich muss den StringBuffer für jeden double-Wert in einem neuen (new) CharBuffer wrappen und kann diesen nicht wiederverwenden. Der CharBuffer übernimmt die length von StringBuffer als Kapazität und nicht die eigentliche capacity(). Gibt es hier vielleicht doch eine Möglichkeit das CharBuffer-Objekt nur einmal zu erstellen und wiederzuverwenden?
 
Zurück