avoid creating buffer on every read