(FB) I/O Buffer
主要的注意点就是,有的时候 read4 是短板,有的时候 readN 自己是短板(不需要4个那么多的字符),在写入的时候要注意处理下。
public int read(char[] buf, int n) {
// file has less than n chars
// n is not divisible by 4
boolean EOF = false;
char[] temp = new char[4];
int curPtr = 0;
while(curPtr < n && !EOF){
int charCount = read4(temp);
EOF = (charCount < 4);
for(int i = 0; i < charCount && curPtr < n; i++){
buf[curPtr++] = temp[i];
}
}
return curPtr;
}多次调用之后,这题的难点就变成了 “如何处理剩余字符”。因为一次 call 拿到的字符很可能超过我们实际需要的,这时候就需要依赖外部 buffer 记录下来,每次新 read() call 的时候,先从缓存里拿。
这个写法就巧妙简洁多了,而且原封不动就可以做原来的问题,非常巧妙。
Last updated