java IO接口中的mark和reset方法
程序员文章站
2024-03-23 09:06:34
...
public void mark(int readlimit) 方法的功能是对输入流进行定位,如果是字节流,则定位字节,如果是字符流则定位字符。参数readlimit指的是在mark之后,可以从输入流中读取的字节个数或者字符个数,如果超出的话,reset()函数将出现问题,但实际操作中如果使用缓冲buffer,即便超出也不会出问题。
package ttt;
import java.awt.image.BufferedImageFilter;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class testtt4 {
public static void main(String[] args) {
FileReader fin=null;
BufferedReader bfin=null;
int s=0;
try{
fin=new FileReader("/home/wangzheng/java_test/myfile.txt");
bfin=new BufferedReader(fin);
for(int i=0;i<5;i++){//先从输入流中读取五个字节。
s=bfin.read();
System.out.print((char)s);
}
System.out.println();
bfin.mark(1);//标记当期位置,即读取了五个字节后的位置,允许mark后读取1个字节。
for(int i=0;i<5;i++){
s=bfin.read();
System.out.print((char)s);
}
System.out.println();
bfin.reset();//读取了五个字节后reset()。已经超出mark规定的读取一个字节,但此时reset依然有效。回到了之前的位置重新读取
//五个字节。
for(int i=0;i<5;i++){
s=bfin.read();
System.out.print((char)s);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
txt文件的内容为:
最终的输出如下:
显然首先读取了五个字节: 1_23_ ,然后mark了当前位置,随后读取了五个字节434_2,虽然超出了mark要求的只能读取1个字节,但因为使用的是缓冲的BufferReader,reset依然有效,随后reset并再次读取相同的内容并打印。
推荐阅读
-
java IO接口中的mark和reset方法
-
JAVA——(File类的常用方法和IO流)
-
java接口中私有方法定义和使用(解决代码重复的问题)
-
定义两个接口,其中各包括一个抽象方法分别用来完成两个数的加法和减法操作,然后创建一个类KY6_3来实现这两个接口中的抽象方法。编写程序KY6_3.java,将源程序写在实验报告中。
-
linux系统中InputStream输入流的方法之reset()和mark()命令的注意事项
-
java中为什么接口中的属性和方法都默认为public?
-
InputStream的mark和reset方法测试
-
linux系统中InputStream输入流的方法之reset()和mark()命令的注意事项
-
在dos窗口中编译和运行java文件的方法
-
Java8新特性(二) 接口中的默认方法和静态方法(面试题:抽象类和接口的区别)