1 GB'lık büyük boyutlu bir dosyayı sıkıştırmayı deniyorum ve dosya çıkış akışı yöntemini kullanamıyorum. Son belgem, yeni bir dosya oluşturmak için sıkıştırılmış dosyanın bayt dizisini gerektirir. Şimdilik, her bir okuma için el ile dizi boyutunu büyütüyorum. Ancak bu büyük dosyalar için çok yavaş. Bu yöntemde verimlilik elde etmenin herhangi bir yolu var mı?System.arrayCopy() yöntemi yerine java'da bayt dizisi birleştirilir.
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);
}
Tamponların bir listesini saklayabilir ve sonunda yalnızca bir ayırma/kopyalama yapabilirsiniz. Ya da daha büyük bir başlangıç tamponu kullanırsınız (bilinen genişletilmiş boyutu kullanarak). Ancak, nihayetinde, tek bir büyük bayt dizisinin yeniden tasarlanmasını gerektirdiğini düşündüğünüz yöntem. – eckes