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
0
A
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.