Standard file-streams are buffered for efficiency. They read data in advance from the file and temporarily store it in a buffer which is emptied as you extract data from it. So, just use the std::ifstream, which has an underlying std::filebuf accessible through rdbuf(). Normally, the buffering is set to be a reasonably good trade-off between not loading too much file data into memory and having enough in-memory data to deliver it in a timely fashion to the program reading it. However, if you want to manually adjust the size of the buffer, you can use the following code:
const std::size_t buf_size = 32768; // choose some buffer size.
char* my_buffer = new char[buf_size]; // create a buffer of that size.
in_file.rdbuf()->pubsetbuf(my_buffer, buf_size); // give the buffer to the filebuf.
// .. read data from 'in_file'