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