In every Java implementation I see of reading from a file, I almost always see a file reader used to read line by line. My thought would be that this would be terribly ineff
You are comparing apples to bananas. Reading one line at a time is going to be less efficient even with a bufferedReader than grabbing data as fast as possible. Note that use of available is discouraged, as it is not accurate in all situations. I found this out myself when I started using cipher streams.