3 ms·
> The default System.out uses a BufferedOutputStream anyway Yes, which is the _problem_, not the _solution_. To clarify: the problem isn't that the code makes
by cbsmith 13y ago
> The default System.out uses a BufferedOutputStream anyway
Yes, which is the _problem_, not the _solution_.
To clarify: the problem isn't that the code makes too many syscalls.
- dlubarov 13y agoSo 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.
- cbsmith 13y agoNo, 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. Try doing this: dd if=/dev/random of=test_file bs=4000 count=100 java YourClass < test_file > test_output diff test_file test_output
- cbsmith 13y agoHere's the simpler, likely slower, but nonetheless actually correct solution: https://gist.github.com/cbsmith/9755809 https://gist.github.com/cbsmith/9755809
- deleted 13y ago[deleted]
- dlubarov 13y agoOh, gotcha. The code above with "byte[] buffer" also works since write(byte[], int, int) flushes.