Reader的reset方法测试
今天在CSDN问答频道看到一个问题,需要把一个BufferedReader读取完成之后,重新回到文件首部再读一遍。我想的是重新再new一个BufferedReader,后来查了下API发现有一个reset方法可以用,但是它要结合mark一起用。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class MapCheck {
public static void main(String[] args) {
try {
File file = new File("D:/Test.java");
MyBufferedReader reader = new MyBufferedReader(new FileReader(file));
String content=reader.readLine();
reader.mark((int)file.length());
while(content!=null){
System.out.println(content);
content=reader.readLine();
}
reader.reset();
content=reader.readLine();
while(content!=null){
System.out.println(content);
content=reader.readLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试发现mark只有在第一次执行readLine后调用,才能回到文件开头重新读取。如果放在其他readLine的地方,就读到的是不全的文件内容。究竟是为什么?代码跟踪还是没有发现原因。不过知道了mark和reset的组合使用方式了。
发现一个悖论:mark只有在执行read操作后才能mark标记当前的position,那么reset只能回到上次mark的地方,而用于不可能回到文件的首位,重新开始。那么reset最多能回到第二个字节处重新进行流读取的操作 。
替换字符串中的反斜杠"\"
ASK问答频道还有一个简单的字符串替换反斜杠的问题,就是String的replace和replaceAll的用法。但是他们有的区别是什么呢?replace就是普通的字符串替换,而replaceAll的第一个参数是正则表达式。正确的实现应该是用replace。
String str = "http://192.168.1.254\\record\\2015Y04M03D14H\\19M00S.mp4?custom=1&cmd=4001";
String newStr = str.replace("\\","/");
System.out.println(newStr);
没有经过测试的代码,是无用代码。虽为简单问题,没有测试,不能臆断。