Если вы намерены сделать это много, как насчет создания обратного класса BufferedInputStream - вы сможете дать некоторую меру контроля над размером каждого куска файла, хранящегося в буфере, и скрыть всю служебную работу от клиента. .
То, что другие говорили о перемещении после каждого фактического ввода / вывода файла, остается в силе - это только улучшит удобство использования, а не производительность.