サイズが約1 GBの大きなファイルを解凍しようとしていますが、ファイル出力ストリームメソッドを使用できません。私の最終的なドキュメントでは、新しいファイルを作成するために圧縮解除されたファイルのバイト配列が必要です。今のところ私は手作業で配列サイズを増やしています。しかし、これは大きなファイルでは遅すぎます。この方法で効率を上げる方法はありますか?System.arrayCopy()メソッドではなくjavaでバイト配列を連結する方法
if (primaryDocumentInputStream != null) {
byte[] tempbuffer = new byte[536870912];
byte[] mainbuffer = new byte[536870912];
int lenMainBuffer = 0;
try {
int aIntBuffer = aGZIPInputStream.read(tempbuffer);
while (aIntBuffer > 0) {
byte[] copyBuffer = new byte[lenMainBuffer + aIntBuffer];
System.arraycopy(mainbuffer, 0, copyBuffer, 0, lenMainBuffer);
System.arraycopy(tempbuffer, 0, copyBuffer, lenMainBuffer, aIntBuffer);
mainbuffer = copyBuffer;
aIntBuffer = aGZIPInputStream.read(tempbuffer);
lenMainBuffer = mainbuffer.length;
}
primaryDocumentOutputDocument.setBody(mainbuffer);
wfc.putPrimaryDocument(primaryDocumentOutputDocument);
}
バッファのリストを保持し、最後に割り当て/コピーを1つだけ行うことができます。または、より大きな初期バッファを使用することもできます(おそらく既知の拡張サイズを使用します)。しかし、最終的には、単一のビッグバイト配列が予期されるメソッドは再設計が必要です。 – eckes