Java中的mark()和reset()方法
根据文件, 无效标记(int readlimit):标记此输入流中的当前位置。 PushbackInputStream的标记方法不起任何作用 void reset():将此流重新定位到上次对此输入流调用mark方法时的位置。 类PushbackInputStream的方法reset除了抛出IOException之外,不执行任何操作 您可以检查上面的“不执行任何操作”。那么,如果是这样,为什么 这在哪里有用?在哪种情况下,我可以使用以上两种 方法 下面是一个例子:Java中的mark()和reset()方法,java,file,stream,reset,pushbackinputstream,Java,File,Stream,Reset,Pushbackinputstream,根据文件, 无效标记(int readlimit):标记此输入流中的当前位置。 PushbackInputStream的标记方法不起任何作用 void reset():将此流重新定位到上次对此输入流调用mark方法时的位置。 类PushbackInputStream的方法reset除了抛出IOException之外,不执行任何操作 您可以检查上面的“不执行任何操作”。那么,如果是这样,为什么 这在哪里有用?在哪种情况下,我可以使用以上两种 方法 下面是一个例子: import java.io.B
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();
}
}
上面是示例,但没有得到两种方法的确切内容
做请导游
标记
和重置
方法是可选操作,并非每个InputStream都需要支持。您可以调用markSupported
,查看它是否支持
PushbackInputStream不支持这些方法
这些方法仍然存在,因为它们是在
InputStream
接口中定义的。可能是错误的设计决策(可能已添加到单独的接口),但事实就是如此。PushbackInputStream.markSupported()
返回false
。因此,无论如何,您不应该调用标记
/重置
。在这个类中,mark
的javadocs清楚地表明它什么也不做。如果它不起作用,那么使用它又有什么关系呢。顺便说一下,我现在明白了。也许是一个糟糕的设计决定:当然。