on my junky MBP running java 6 -
read(byte[]) & write(byte[], int, int):
real 0m6.588s
user 0m0.876s
sys 0m1.406s
vs. read() & write(int) real 0m16.836s
user 0m10.624s
sys 0m4.245s
vs the mighty cat - < in > out: real 0m4.609s
user 0m0.015s
sys 0m0.458s
For a 150 mb file.I'd say read(byte[]) / write(byte[], int, int) performed pretty well.
Now some points.
System.in is an InputStream, System.out is a PrintStream. Assuming anything more about their buffering nature is wrong. AFIAK there is nothing in the java spec that spells out any other explicit behaviour. So if you want to ensure your code works properly, code against the interfaces you're given, not the implementations you expect are sitting behind them.
This question (and stdin/stdout/stderr questions in general) are heavily biased in favour of devs comfortable of working in a Unix-y environment. If you're fine with short changing people that use that other OS that's cool. But if you want a 'trivial' demonstration of programming skill - a FizzBuzz type of question is much less biased way of achieving that.