2015-04-21 200 views
0

我需要從被調用的方法返回ByteArrayOutputStream的字節數組。我看到兩種方法實現同樣的事情:首先返回ByteArrayOutputStream &使用toByteArray()的方法,其次使用baos.toByteArray()並返回字節數組。java:返回流或結果字節

我應該使用哪一個?

爲了通過例子來說明:

方法1種

void parentMethod(){ 
     bytes [] result = process(); 
    } 
    void byte[] process(){ 
     ByteArrayOutputStream baos; 
     ..... 
     ..... 
     ..... 
     baos.toByteArray(); 
    } 

方法2

void parentMethod(){ 
     ByteArrayOutputStream baos = process();  
    } 
    void ByteArrayOutputStream process(){ 
     ByteArrayOutputStream baos; 
     ..... 
     ..... 
     ..... 
     return baos; 
    } 
+1

鑑於'parentMethod()'不需要關心它如何得到字節本身,返回'byte []'似乎更好。 –

回答

2

還有另一種替代方案:返回一個InputStream。這個想法大概是你要返回操作產生的數據。因此,返回一個輸出流對我來說似乎很奇怪。要返回數據,通常要麼返回原始文件byte[],要麼返回InputStream - 後者更靈活,因爲它可以從文件或類似文件中讀取數據,但確實需要調用者關閉數據流。

它部分取決於調用者對數據的處理方式 - 如果已經有數據流,有些操作更容易執行;有一些字節數組更容易。我會讓這個決定影響很多。

如果想返回流,這很簡單:

return new ByteArrayInputStream(baos.toByteArray()); 

所以總結:

  • 不要返回ByteArrayOutputStream。使用這個類來獲取數據是一個實現細節,它並不是真正的操作邏輯結果。
  • 如果調用者可能會發現更易於使用或者稍後想要從文件(或網絡連接或其他)讀取數據,請考慮返回InputStream; ByteArrayInputStream適用於當前的實現