Я с удивлением обнаружил, что следующий фрагмент:
void print() {
System.out.print("!");
System.out.print("!\0");
System.out.flush(); // This line does not affect the outcome
System.out.println("!");
System.out.println("!");
}
будет только распечатывать:
!!
!
Я искал реализацию исходного кода Open JDK, но нетпомочь.
Единственная подсказка имеет подсказку о том, что она выглядит как BufferedOutputStream
, и, похоже, также имеет аналогичное поведение "прекратить на \ u0000".
Также я не могу найти какую-либо документацию оэто довольно неожиданное (для меня) поведение.
РЕДАКТИРОВАТЬ: Моя среда:
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
IDE: Eclipse Indigo 3.7.0
ИЗМЕНИТЬ СНОВА: В командной строке этот код работает, как и ожидалось (четыре "!").Таким образом, похоже, что это ошибка для Eclipse 3.7.0 Indigo под Ubuntu?
(Должно быть) ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Кажется, что, как сказал неопровержимый и amir75, это не причуда Java: я перенаправил выводEclipse в файл, и если я открою его в Eclipse, у контента будет только три "!";но при использовании cat
из командной строки их четыре.Кроме того, vi и emacs показывают !!^@!
для первой строки, как и ожидалось.Спасибо всем!
Может кто-нибудь пролить свет на это?Требуется ли это где-нибудь в Java Spec?Спасибо за любые комментарии!