原题链接:https://leetcode.com/problems/read-n-characters-given-read4/
这也是一道带锁题,题目的意思是给定一个函数read4(char[] buf) 的函数,每次可以最多读4个字节的字符,然后要求通过给定的函数来实现一个函数,能按照要求读出n个字符。
这道题目是http://blog.csdn.net/foolnote/article/details/50626162的简化版,因为题目说目标函数只会被调用一次,这就大大简化了题目难度。所以我们的思路就很简单,在函数体里循环调用read4()函数。直到读出我们想要的字符数为止。这里要注意一下,有可能在我们读足要想的字符数之前,read4()函数就已经扫到文件尾部位置了。代码如下:
public int read(char[] buf, int n) {
if(n == 0)
return 0;
int read = 0;
char[] buffer4 = new char[4];
while(true)
{
int r = read4(buffer4);
for(int i = 0;i<r && read<n;i++)
{
buf[read++]= buffer4[i];
}
if(r != 4)
break;
}
return read;
}
这道题主要考察我们对已知API的调用,但面试更可能会考158一些,所以大家还是要会的。