> Finally, do you think maybe you might need to worry about buffering of System.out's stream?
print() won't flush to the console unless you pass '\n' and auto-flushing is on. It will flush its internal buffer, but that's okay! The default System.out uses a BufferedOutputStream anyway:
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
...
new PrintStream(new BufferedOutputStream(fdOut, 128), true)
So using print() instead of write() shouldn't cause any extra system calls, although there many be a small CPU cost.
So what are you saying is the problem then? That writing to the BufferedOutputStream for each character is CPU-inefficient and he should be doing this?
public static void main(String[] args) throws IOException {
byte[] buffer = new byte[1 << 12];
for (;;) {
int nRead = System.in.read(buffer);
if (nRead == -1) return;
System.out.write(buffer, 0, nRead);
}
}
If so, fair enough, but it's reasonable to go with the simpler solution if you're not given any particular performance requirements.
No, I'm saying you are already using a BufferedInputStream and a BufferedOutputStream. That is the problem: you aren't guaranteeing your output matches your input.
print() won't flush to the console unless you pass '\n' and auto-flushing is on. It will flush its internal buffer, but that's okay! The default System.out uses a BufferedOutputStream anyway:
So using print() instead of write() shouldn't cause any extra system calls, although there many be a small CPU cost.Obvious, right? Don't you love java.io? :)