2017-06-22 79 views
0

我正在研究一個Java插件,它使用兩個變量bespoke type並返回一個相同類型。此類型可以從InputStream轉換爲並轉換爲InputStream。我需要在第一個結束時裁剪第一個,在開始時裁剪第二個,然後在返回之前合併這兩個。這裏使用的最好的中間類型是什麼,這將使所有的裁剪和合並變得簡單和容易維護?我不想通過字符串去,因爲我已經嘗試過了,而且它弄亂了編碼。編輯,合併並返回InputStream

回答

0

後一些版本比較各地和測試我找到了解決自己:

public Document concat(final Document base, final Document addOn) throws IOException 
{ 
    // Convert Documents to InputStreams 
    InputStream isBase = base.getInputStream(); 
    InputStream isAddOn = addOn.getInputStream(); 

    // Create new variable as base minus last 33 bytes 
    int baseLength = isBase.available(); 
    byte[] baBase = IOUtils.toByteArray(isBase); 
    byte[] baEndLessBase = Arrays.copyOf(baBase, baseLength-33); 

    // Create new variable as addOn minus first 60 bytes 
    int addOnLength = isAddOn.available(); 
    byte[] baAddOn = IOUtils.toByteArray(isAddOn); 
    byte[] baHeadLessAddOn = Arrays.copyOfRange(baAddOn, 60, addOnLength); 

    // Combine the two new variables 
    byte[] baResult = new byte[baEndLessBase.length + baHeadLessAddOn.length]; 
    System.arraycopy(baEndLessBase, 0, baResult, 0, baEndLessBase.length); 
    System.arraycopy(baHeadLessAddOn, 0, baResult, baEndLessBase.length, baHeadLessAddOn.length); 

    // Debug 
//  FileUtils.writeByteArrayToFile(new File("baEndLessBase.pcl"), baEndLessBase); 
//  FileUtils.writeByteArrayToFile(new File("baHeadLessAddOn.pcl"), baHeadLessAddOn); 
//  FileUtils.writeByteArrayToFile(new File("baResult.pcl"), baResult); 

    // Convert to Document 
    Document result = new Document(baResult); 
    result.passivate(); 

    return result; 
} 

它使用一個簡單的字節數組,然後將數組和IOUtils類做最繁重的工作。