2010-11-20 36 views
1

J'ai un programme Java dans un environnement UNIX qui nécessite la transmission de données en mémoire tampon dans System.in.Comment rediriger des données de ligne tamponnées dans un programme à partir d'un fichier plutôt que d'un bloc de données

passage en entrée du clavier du terminal est très bien, mais si je tente de rediriger l'entrée d'un fichier d'une manière telle que:

java the_program < input.txt 

le programme ne sera pas exécuté correctement.

De quelles façons puis-je transmettre des données en mémoire tampon par opposition aux données en mémoire tampon via le programme stdin?

J'ai essayé:

stdbuf -oL cat input.txt | java the_program 

et

stdbuf -i0 java the_program < input.txt 

ainsi que

grep --line-buffered . input.txt | java the_program 

mais n'ont pas eu de chance.

Des idées ou des suggestions?

Répondre

0

La plupart du problème se trouve dans le programme Java - pourquoi/comment a-t-il besoin que l'entrée soit mise en mémoire tampon? Il devrait être conçu pour utiliser l'analogue du fgets() de C de sorte qu'il lise juste une ligne à la fois. S'il n'y a pas un tel analogue, alors peut-être vous devez écrire une fonction/classe qui fournit ce service, en prenant tout ce que vous pouvez lire dans les unités fournies, et soit scinder ou concaténer aux limites de la ligne.

A défaut, vous pourriez avoir à se livrer à des opérations non portables telles que l'utilisation du descripteur de fichier appel sur le tuyau du système fstat(), uniquement par écrit à la conduite quand il n'y a pas de données dans ce (regardant le membre st_size). Cependant, il n'est pas garanti que cela fonctionnera - nonportable signifie qu'il ne peut pas. Évidemment, vous devez vous assurer que votre programme écrit une ligne à la fois et vide la sortie si vous utilisez des E/S standard.

+0

Oui, j'aurais dû clarifier. Le programme java est conçu pour échouer pour une entrée non-bufférisée et doit être supposé que "the_program" peut être n'importe quel programme qui accepte standard. Le but est de simuler l'entrée de l'utilisateur via le clavier, mais avec des tests prédéfinis dans un fichier texte . – Milo