2014-10-29 61 views
0

最近,我使用AppScan Source來掃描編碼,發現了一個我不知道如何修復並傳遞到掃描儀的結果,或者這是虛驚嗎?如何防止在Java中找到「Validation.EncodingRequired」

這是我的代碼。

public static void copyFileUsingFileStreams(File source, File dest) 
    throws IOException 
    { 
    InputStream input = null; 
    OutputStream output = null; 
    try 
    { 
     input = new FileInputStream(source); 
     output = new FileOutputStream(dest); 
     byte[] buf = new byte[1024]; 
     int bytesRead; 
     while ((bytesRead = input.read(buf)) > 0) { 
     output.write(buf, 0, bytesRead); //Scanner reported that's a vulnerability in API OutputStream.write() 
     } 
    } 
    finally 
    { 
     input.close(); 
     output.close(); 
    } 
    } 

回答

0

看起來不錯。如果您正在編寫字節,則不需要編碼。如果你正在寫字,那將是另一回事。

這就是說,你真的應該在緩存的版本被包裹你的流:

output = new BufferedOutputStream(new FileOutputStream(dest)); 

,類似的還有input。這不會影響任何與編碼有關的事情,但它會使文件I/O更高效。

你也應該改變你的finally塊:

finally 
{ 
    if (input!=null) 
     input.close(); 
    if (output!=null) 
     output.close(); 
} 

當你開始捕捉和處理IOException S,你應該做,你會冒着NullPointerException而如果有什麼差錯的流正在創建。

+0

感謝chiastic解釋此事:-) – 2014-10-29 09:10:06