2009-09-16 3 views
0

J'appelle une méthode à partir d'une bibliothèque externe avec un (simplifié) signature comme ceci:Est-il possible d'éviter les fichiers temporaires lorsqu'une méthode Java attend des arguments Reader/Writer?

public class Alien 
{ 
    // ... 
    public void munge(Reader in, Writer out) { ... } 
} 

La méthode lit essentiellement une chaîne d'un flux et écrit le résultat à l'autre. J'ai plusieurs chaînes dont j'ai besoin traitées par cette méthode, mais aucune d'entre elles existent dans le système de fichiers. Les cordes peuvent devenir assez longues (environ 300KB chacune). Idéalement, je voudrais appeler munge() comme un filtre:

public void myMethod (ArrayList<String> strings) 
{ 
    for (String s : strings) { 
     String result = alienObj.mungeString(s); 
     // do something with result 
    } 
} 

Malheureusement, la classe Alien ne fournit pas une méthode mungeString(), et n'a pas été conçu pour être hérité de. Est-ce que je peux éviter de créer deux fichiers temporaires chaque fois que j'ai besoin de traiter une liste de chaînes? Comme, mon tube d'entrée dans le flux Reader et le relire à partir du flux Writer, sans réellement toucher le système de fichiers?

Je suis nouveau à Java, s'il vous plaît pardonnez-moi si la réponse est évidente pour les professionnels.

+0

Mon Dieu, je devais être aveugle. Merci pour les réponses rapides! – Zilk

Répondre

3

Vous pouvez facilement éviter les fichiers temporaires en utilisant tout/tous ces:

Un échantillon méthode mungeString() pourrait ressembler à ceci:

public String mungeString(String input) { 
    StringWriter writer = new StringWriter(); 
    alienObj.munge(new StringReader(input), writer)); 
    return writer.toString(); 
} 
Questions connexes