相当于ungetc在java中

时间:2010-02-05 05:54:28

标签: java

我正在用java编写程序(已经在C中编写了一个版本)。在读完之后,我真的需要将一个字符放回输入流。这可以通过C / C ++中的ungetc()来完成,我很想知道如何在Java中做同样的事情?

对于那些不了解C / C ++的人: char myc = (char)System.in.read(); 我检查了myc的值,现在我想把myc放回System.in!所以当我打电话给System.in时,我得到了那个价值。 (但我怎么能这样做?)

注意:我正在寻找确切的技术。请不要建议我抓住它或在其他地方登录并从那里读取,因为我知道如何处理那些东西。我感兴趣的是等同于Java中的ungetc(),如果有的话。

干杯。

3 个答案:

答案 0 :(得分:4)

您正在寻找PushbackInputStream

Java的IO库的设计使基元非常基本,并通过组合添加了其他功能。例如,如果您想缓冲文件中的输入,则可以调用new BufferedInputStream(new FileInputStream("myfile.txt"));,或者如果您想使用UTF-8编码从流中读取文本,则可以调用new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");

所以你要做的是用new PushbackInputStream(System.in);

创建一个PushbackInputStream

这里需要注意的是,您实际上并没有将字节推回标准输入。一旦你从System.in读取它就消失了,访问System.in的其他代码也无法获得该字节。您推回的任何内容都只能从您为处理数据而创建的特定PushbackInputStream中获得。

答案 1 :(得分:3)

如果输入流支持标记,您可以使用mark()reset()方法来实现您的目标。

您可以将System.in打包到BufferedInputStreamBufferedReader以获得标记支持。

答案 2 :(得分:0)

RandomAccessFile可以.seek( .getFilePointer() - 1 )