2008-11-10 25 views
9

İstemciden sunucuma dosya yüklemek için kod yazıyorum ve performansın olması gerektiği kadar hızlı değil.Java kullanarak dosya aktarmanın en iyi yolu nedir?

Dosya aktarımı yapan geçerli kod parçacığım var ve aktarımı nasıl hızlandıracağımı merak ediyordum.

public static int[] getBytesFromStream(InputStream in, int size) throws IOException { 
    int[] b = new int[size]; 
    int count = 0; 
    while (count < size) { 
     b[count++] = in.read(); 
    } 
    return b; 
} 

ve: tüm kodu ile ilgili yazık

aşağıdaki gibidir:

InputStream fileItemInputStream ; 
OutputStream saveFileStream; 
int[] buffer; 
while (fileItemInputStream.available() > 0) { 
    buffer = Util.getBytesFromStream(fileItemInputStream); 
    Util.writeIntArrToStream(saveFileStream, buffer); 
} 
saveFileStream.close(); 
fileItemInputStream.close(); 

Util yöntemler

bir seferde tek bir bayt okuma

public static void writeIntArrToStream(OutputStream out, int[] arrToWrite) throws IOException { 
    for (int i = 0; i < arrToWrite.length; i++) { 
     out.write(arrToWrite[i]); 
    } 
} 

cevap

16

olacak korkunç derecede verimsiz olmak. Ayrıca nadiren iyi bir fikir olan available güveniyorsunuz. (Şu anda hiçbir bayt varsa 0 dönecek ama gelmek için daha fazla olabilir.)

Bu akışı kopyalamak için kodun doğru tür:

public void copyStream(InputStream input, OutputStream output) throws IOException 
{ 
    byte[] buffer = new byte[32*1024]; 
    int bytesRead; 
    while ((bytesRead = input.read(buffer, 0, buffer.length)) > 0) 
    { 
     output.write(buffer, 0, bytesRead); 
    } 
} 

(arayan Her iki akışları kapatmalıdır.)

+0

Ben Java'nın imzalı bayt taşan dosyada benim imzasız bayt konusunda endişelenmenize gerek yok? – jjnguy

+0

Bunlar, mp3 dosyaları, eğer önemliyse – jjnguy

+1

Hayır, yapmazsınız. Bu sadece okuma ve yazma, herhangi bir aritmetik veya dönüşüm gerçekleştirmeme. –

İlgili konular