human: use reader/writer for I/O