2010-02-05 24 views
5

Estoy escribiendo un programa en Java (ya escribí una versión en C también). Realmente necesito volver a poner un personaje en la secuencia de entrada después de leerlo. Esto se puede lograr por ungetc() en C/C++, y me pregunto ¿cómo puedo hacer lo mismo en Java?equivalente de ungetc En java

Para aquellos que no saben C/C++: char myc = (char)System.in.read(); y puedo comprobar el valor de myc y ahora quiero volver a poner myc en el System.in! así que cuando llamo al System.in, obtengo ese valor. (¿Pero cómo puedo hacer esto?)

NOTA: Estoy buscando la técnica exacta. Por favor, no me aconsejen que lo atrape o lo registre en otro lugar y lean a partir de ahí, porque sé cómo esas cosas. Lo que me interesa es equivalente a ungetc() en Java si hay alguno.

Saludos.

Respuesta

4

Usted está buscando PushbackInputStream

biblioteca IO de Java está diseñado de modo que los primitivos son realmente se añade la funcionalidad básica y adicional a través de la composición. Por ejemplo, si usted quiere intermedia de entrada de un archivo, que llamarían new BufferedInputStream(new FileInputStream("myfile.txt")); o si desea leer de la corriente en forma de texto utilizando la codificación UTF-8 que se dice new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");

Así que lo que quiere hacer es crear un PushbackInputStream con new PushbackInputStream(System.in);

La advertencia aquí es que en realidad no está volviendo a insertar los bytes en la entrada estándar. Una vez que haya leído System.in ya no estará, y ningún otro código que acceda a System.in podrá acceder a ese byte. Cualquier cosa que rechace solo estará disponible desde un determinado PushbackInputStream creado para manejar los datos.

0

A RandomAccessFile puede .seek(.getFilePointer() - 1).

+0

"java myapp Pooria