我正在用java写一个程序(已经用C写了一个版本)。我真的需要在读完一个字符后把它放回输入流中。这可以通过C/C++中的ungetc()来完成,我想知道在Java语言中如何做同样的事情?
对于那些不知道C/C++的人:char myc = (char)System.in.read();和我检查了myc的值,现在我想把myc放回System.in中!所以,当我调用System.in时,我又得到了这个值。(但我该如何做到这一点呢?)
注意:我正在寻找精确的技术。请不要建议我捕获它或将其记录在其他地方,然后从那里读取,因为我知道如何处理这些东西。我感兴趣的是Java中的ungetc(),如果有的话。
干杯。
发布于 2010-02-05 14:56:33
您正在寻找PushbackInputStream
Java的IO库是这样设计的,所以原语是真正基本的,并且通过组合添加了额外的功能。例如,如果希望缓冲来自文件的输入,则可以调用new BufferedInputStream(new FileInputStream("myfile.txt"));;如果希望使用UTF8编码从流中读取文本,则可以调用new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");
因此,您要做的是使用new PushbackInputStream(System.in);创建一个PushbackInputStream
这里需要注意的是,您实际上并没有将字节推回到标准输入。一旦你从System.in中读取了它,它就消失了,其他访问System.in的代码都不能获取这个字节。您推回的任何内容都只能从您为处理数据而创建的特定PushbackInputStream中获得。
发布于 2010-02-05 14:00:44
如果输入流支持标记,那么您可以使用mark()和reset()方法来实现您想要的效果。
您可以将System.in包装到BufferedInputStream或BufferedReader中以获得标记支持。
发布于 2010-02-05 14:00:39
RandomAccessFile可以.seek( .getFilePointer() - 1 )。
https://stackoverflow.com/questions/2205308
复制相似问题