Java: Comment lire à partir de PrintStream?
Question
J'essaie de lire (ajouter les données entrantes dans une chaîne locale) à partir d'un PrintStram dans le bloc de code suivant:
System.out.println("Starting Login Test Cases...");
out = new PrintStream(new ByteArrayOutputStream());
command_feeder = new PipedWriter();
PipedReader in = new PipedReader(command_feeder);
main_controller = new Controller(in, out);
for(int i = 0; i < cases.length; i++)
{
command_feeder.write(cases[i]);
}
main_controller écrira quelques chaînes dans sa sortie (PrintStream), comment puis-je lire à partir de ce PrintStream en supposant que je ne peux modifier aucun code dans la classe Controller? Merci d'avance.
La solution
Simplement dit: vous ne pouvez pas. Un PrintStream est destiné à la sortie . Pour lire des données, vous avez besoin d’un InputStream (ou d’une sous-classe).
Vous avez déjà un ByteArrayOutputStream. Le plus facile à faire est:
// ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
out = new PrintStream(baos);
// ...
ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());
// use in to read the data
Autres conseils
Si vous conservez une référence au flux de sortie du tableau d'octets sous-jacent, vous pouvez appeler toString (codage de chaîne) ou toByteArray () .
Je soupçonne que vous voulez l'ancien, et vous devez spécifier le codage correspondant à la façon dont les chaînes ont été écrites (vous pourrez peut-être utiliser la variante de codage par défaut)
Etant donné que vous ne pouvez pas modifier le contrôleur, démarrez un processus pour le contrôleur et lisez-le à partir de la sortie du processus.
Exemple .