0
我正在研究一個Java插件,它使用兩個變量bespoke type並返回一個相同類型。此類型可以從InputStream轉換爲並轉換爲InputStream。我需要在第一個結束時裁剪第一個,在開始時裁剪第二個,然後在返回之前合併這兩個。這裏使用的最好的中間類型是什麼,這將使所有的裁剪和合並變得簡單和容易維護?我不想通過字符串去,因爲我已經嘗試過了,而且它弄亂了編碼。編輯,合併並返回InputStream
我正在研究一個Java插件,它使用兩個變量bespoke type並返回一個相同類型。此類型可以從InputStream轉換爲並轉換爲InputStream。我需要在第一個結束時裁剪第一個,在開始時裁剪第二個,然後在返回之前合併這兩個。這裏使用的最好的中間類型是什麼,這將使所有的裁剪和合並變得簡單和容易維護?我不想通過字符串去,因爲我已經嘗試過了,而且它弄亂了編碼。編輯,合併並返回InputStream
後一些版本比較各地和測試我找到了解決自己:
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類做最繁重的工作。