为什么将字节推回流是一件好事?当我处理流时,我可以忽略字节或者修改它,如果我想要这样做:
try(InputStream is = new FileInputStream("test.txt")){
int aByte;
char c;
while((aByte = is.read()) != -1){
c = (char)aByte;
if(c == 'h') {
c = 'X';
}
System.out.print(c);
}
我检查了javadocs,但我仍然不明白,为什么在某些情况下我应该把数据放回流中。对不起家伙。
push back与选项提前窥视和测试是某些条件是真还是假有关。如果是假的,你想继续,如果你没有高峰在前面,所以你必须推回流的许多字符,因为你偷看前面。否则,您可以替换前面的峰值部分,并从那里继续。
(见]http://tutorials.jenkov.com/java-io/pushbackinputstream.html
[或]http://www.java-samples.com/showtutorial.php?tutorialid=390
[Or] book: "The Complete Reference Part 2 by Herbert Schildt".
PushbackInputStream是用来解析InputStream数据的。有时,在确定如何解释当前字节之前,需要提前读取几个字节来查看将要发生的内容。PushbackInputStream允许你那样做。实际上,它允许您将读取的字节推回流中。这些字节将在下次调用read()时再次被读取。——Jenkov
int c;
while ((c = f.read()) != -1) {
switch(c) {
case '=':
if ((c = f.read()) == '=') {
System.out.print(".eq.");
} else {
System.out.print("<-");
f.unread(c);
}
}
这样你就能保持阅读的流畅性。
警告:PushbackInputStream的副作用是使用于创建它的InputStream的mark()或reset()方法无效。使用markSupported()来检查任何你要使用mark()/reset()的流。——www.java-samples.com——