The API:
int read4(char *buf)
reads 4 characters at a time from a file.
The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.
By using the
read4
API, implement the function int read(char *buf, int n)
that reads n characters from the file.
Note:
The
The
read
function will only be called once for each test case.Solution:
The idea is to call read4() multiple times.
Each time after calling read4(), we move all elements from internal buffer to buf.
When we get enough elements we want, or there is no more character to read, we return.
Code:
/* The read4 API is defined in the parent class Reader4. int read4(char[] buf); */ public class Solution extends Reader4 { /** * @param buf Destination buffer * @param n Maximum number of characters to read * @return The number of characters read */ public int read(char[] buf, int n) { char[] internal = new char[4]; int offset = 0; while (true) { int count = read4(internal); for (int i = 0; i < count && offset != n; i++) { buf[offset++] = internal[i]; } if (offset == n || count == 0) { break; } } return offset; } }