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类做最繁重的工作。