4

根据文件,

void mark(int readlimit):标记此输入流中的当前位置。PushbackInputStream 的 mark 方法什么都不做

void reset():将此流重新定位到最后一次在此输入流上调用标记方法时的位置。PushbackInputStream 类的方法 reset除了抛出一个 IOException 之外什么都不做。

您可以检查上面的“什么都不做”。那么,如果是这种情况,为什么以及在哪里有用?在哪种情况下我可以使用以上两种方法?

以下是示例:

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.io.PushbackInputStream; 
public class PushbackInputStreamDemo  
{ 
    public static void main(String arg[]) throws Exception 
    { 
        PrintWriter pw = new PrintWriter(System.out, true); 
        String str = "GeeksforGeeks a computer science portal "; 
        byte b[] = str.getBytes(); 
        ByteArrayInputStream bout = new ByteArrayInputStream(b); 
        PushbackInputStream push = new PushbackInputStream(bout); 

        int c; 
        while((c=push.read())!=-1) 
        { 
            pw.print((char)c); 
        } 
        pw.println(); 

        // marking the position  
        push.mark(5); 

        // reseting is not supported throw exception 
        push.reset(); 

        pw.close(); 
    } 
} 

以上是示例,但没有得到这两种方法的确切作用。请指导。

4

1 回答 1

3

markand方法是可选操作,reset并非每个 InputStream 都需要支持。你可以打电话markSupported问问有没有。

PushbackInputStream 不支持这些方法。

方法仍然存在,因为它们是在InputStream接口中定义的。也许是一个糟糕的设计决策(可能已经添加到单独的界面中),但事实就是这样。

于 2019-10-04T04:41:07.543 回答