2017-06-22 6 views
0

Je travaille sur un plug-in Java qui prend deux variables de bespoke type et renvoie un du même type. Ce type peut être converti depuis et vers InputStream. Je vais devoir recadrer le premier à la fin et le second au début, puis fusionner les deux avant de les retourner. Quel est le meilleur type intermédiaire à utiliser ici qui rendra toute la récolte et la fusion simple et facile à maintenir? Je ne veux pas passer par une chaîne de caractères parce que j'ai essayé ça et ça a chamboulé l'encodage.Modifier, fusionner et retourner InputStream

Répondre

0

Après un peu plus diffing autour et tester j'ai trouvé moi-même solution:

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; 
} 

Il utilise un octet simple, tableau, puis les tableaux et les classes IOUtils fait la plupart du levage de charges lourdes.