2010-02-05 17 views
5

Sto scrivendo un programma in java (ho già scritto una versione anche in C). Ho davvero bisogno di rimettere un personaggio nel flusso di input dopo averlo letto. Questo può essere realizzato da ungetc() in C/C++, e mi chiedevo come posso fare la stessa cosa in Java?equivalente di ungetc In java

Per quelli di voi non so C/C++: char myc = (char)System.in.read(); e controllare il valore di myc e ora voglio mettere di nuovo in myc al System.in! così di nuovo quando chiamo System.in, ottengo quel valore. (Ma come posso fare questo?)

NOTA: Sto cercando la tecnica esatta. Per favore non consigliarmi di prenderlo o registrarlo da qualche altra parte e leggere da lì, perché so come quelle cose genere. Quello che mi interessa è l'equivalente di ungetc() in Java se ce n'è.

Cheers.

risposta

4

Siete alla ricerca di PushbackInputStream

biblioteca IO di Java è stato progettato in modo che le primitive sono le funzionalità veramente di base e aggiuntivi viene aggiunto attraverso la composizione. Ad esempio, se si voleva buffer di input da un file, voi chiamereste new BufferedInputStream(new FileInputStream("myfile.txt")); o se si vuole leggere dal flusso come testo utilizzando codifica UTF-8 che si definirebbe new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");

Quindi, ciò che si vuole fare è creare un PushbackInputStream con new PushbackInputStream(System.in);

L'avvertenza è che in realtà non si stanno riportando i byte sullo standard input. Una volta letto da System.in non c'è più e nessun altro codice che accede a System.in sarà in grado di ottenere quel byte. Tutto ciò che si respinge sarà sempre disponibile solo da determinati PushbackInputStream creati per gestire i dati.

0

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

+0

"java myapp Pooria

3

Se il flusso di input supporta la marcatura, è possibile utilizzare i metodi mark() e reset() per ottenere ciò che si desidera.

È possibile avvolgere System.in in un BufferedInputStream o un BufferedReader per ottenere il supporto della marcatura.