我正在用java编写程序(已经在C中编写了一个版本)。在读完之后,我真的需要将一个字符放回输入流。这可以通过C / C ++中的ungetc()
来完成,我很想知道如何在Java中做同样的事情?
对于那些不了解C / C ++的人:
char myc = (char)System.in.read();
我检查了myc的值,现在我想把myc放回System.in
!所以当我打电话给System.in
时,我得到了那个价值。 (但我怎么能这样做?)
注意:我正在寻找确切的技术。请不要建议我抓住它或在其他地方登录并从那里读取,因为我知道如何处理那些东西。我感兴趣的是等同于Java中的ungetc()
,如果有的话。
干杯。
答案 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);
这里需要注意的是,您实际上并没有将字节推回标准输入。一旦你从System.in读取它就消失了,访问System.in的其他代码也无法获得该字节。您推回的任何内容都只能从您为处理数据而创建的特定PushbackInputStream中获得。
答案 1 :(得分:3)
如果输入流支持标记,您可以使用mark()和reset()方法来实现您的目标。
您可以将System.in
打包到BufferedInputStream或BufferedReader以获得标记支持。
答案 2 :(得分:0)
RandomAccessFile
可以.seek( .getFilePointer() - 1 )
。