2008-11-10 122 views
9

我正在編寫從客戶端上傳文件到我的服務器的代碼,性能沒有我認爲的那麼快。使用Java傳輸文件的最佳方式是什麼?

我有當前的代碼片段正在進行文件傳輸,我想知道如何加快傳輸速度。

對不起所有的代碼:

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

使用util方法如下:

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; 
} 

和:

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

回答

16

每次讀一個字節將可怕的是效率低下。你也依靠available,這很少是一個好主意。 (它會返回0,如果目前有沒有可用的字節,但可能有更多的驚喜。)

這是代碼右邊的排序複製流:

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); 
    } 
} 

(呼叫者應該關閉這兩個流。)

+0

我不必擔心文件中的無符號字節溢出Java簽名的字節? – jjnguy 2008-11-10 07:38:44

相關問題