2010-02-05 4 views
5

J'écris un programme en Java (déjà écrit une version en C aussi). J'ai vraiment besoin de replacer un personnage dans le flux d'entrée après l'avoir lu. Cela peut être accompli par ungetc() en C/C++, et je me demandais comment puis-je faire la même chose en Java?équivalent de ungetc In java

Pour ceux d'entre vous ne connaissez pas C/C++: char myc = (char)System.in.read(); et je vérifie la valeur de myc et maintenant je veux remettre myc dans la System.in! Donc encore quand j'appelle System.in, j'obtiens cette valeur. (Mais comment est-ce que je peux faire ceci?)

NOTE: Je cherche la technique exacte. S'il vous plaît, ne me conseillez pas de l'attraper ou de l'enregistrer ailleurs et de lire à partir de là, parce que je sais comment faire. Ce qui m'intéresse est l'équivalent de ungetc() en Java s'il y en a.

Cheers.

Répondre

4

Vous recherchez PushbackInputStream

bibliothèque Java IO est conçu pour les primitives sont vraiment des fonctionnalités de base et supplémentaire est ajoutée par la composition. Par exemple, si vous vouliez tampon d'entrée d'un fichier, vous appelleriez new BufferedInputStream(new FileInputStream("myfile.txt")); ou si vous voulez lire du flux sous forme de texte en utilisant UTF-8 d'encodage que vous souhaitez appeler new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");

Alors ce que vous voulez faire est de créer Un pushbackInputStream avec new PushbackInputStream(System.in);

La mise en garde ici est que vous ne repoussez pas réellement les octets sur l'entrée standard. Une fois que vous avez lu depuis System.in, il n'y en a plus, et aucun autre code accédant à System.in ne pourra atteindre cet octet. Tout ce que vous repousserez ne sera disponible qu'à partir de PushbackInputStream que vous avez créé pour gérer les données.

0

Un RandomAccessFile peut .seek(.getFilePointer() - 1).

+0

"java myapp Pooria

3

Si le flux d'entrée prend en charge le marquage, vous pouvez utiliser les méthodes mark() et reset() pour atteindre vos objectifs.

Vous pouvez placer un System.in dans un BufferedInputStream ou un BufferedReader pour bénéficier du support du marquage.