Hi Benjamin,
By "filestream" do you mean the C++ std::fstream class?
Cap'n Proto doesn't directly support C++ iostreams, because, frankly, iostreams are slow and poorly-designed. If you want to read from an std::fstream, you'll need to write a custom subclass of kj::InputStream (from kj/io.h) which wraps the fstream. You can then use capnp::InputStreamMessageReader to read from that.
However, it's much more efficient to use raw file descriptors instead (or HANDLEs on Windows). On Unix-ish systems, use open() to open a file, then pass the returned file descriptor (an integer) to capnp::StreamFdMessageReader. You can also use file descirptors on Windows (make sure to pass O_BINARY flag to open()), but it may be more efficient to use Windows' CreateFile() function which returns a HANDLE, then create kj::HandleInputStream on top of that, and capnp::InputStreamMessageReader on top of that.
Note that for large files (more than a megabyte), you might want to consider memory mapping instead of streaming reads, especially if you only need to process a few pieces of the overall data. Memory mapping places the whole file into memory in a way that lets the operating system loads pages of the file on-demand when first accessed by the program, rather than reading the whole file from disk upfront. Probably the easiest way to do memory mapping is to use the KJ filesystem API in kj/filesystem.h; it wraps the fiddly details in a platform-independent way, although the KJ filesystem API itself is admittedly fairly complex.
-Kenton