为什么在Java中打印“\0”会使该行的其余部分无效?
我困惑地发现以下片段:为什么在Java中打印“\0”会使该行的其余部分无效?,java,string,stream,io,Java,String,Stream,Io,我困惑地发现以下片段: 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("!"); } 将仅打印出: !! ! 我在OpenJDK的源代码中搜索了实现,但没有结果 唯一
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("!");
}
将仅打印出:
!!
!
我在OpenJDK的源代码中搜索了实现,但没有结果
唯一的线索是它似乎是BufferedOutputStream,而且它似乎也有类似的terminate on \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
再次编辑:在命令行下,此代码按预期工作!s那么这似乎是Ubuntu下Eclipse3.7.0Indigo的一个bug
应该是最终编辑:正如不可更改和amir75所说,这不是Java的一个怪癖:我将Eclipse的输出重定向到一个文件,如果我在Eclipse中打开它,内容只有三个!s但是当从命令行使用cat时,有四种方法。此外,vi和emacs都显示!!^@!对于第一行,正如预期的那样。谢谢大家!
有人能解释一下吗?Java规范中的任何地方都需要这样做吗?谢谢你的意见 Java可能无法控制该行为-控制台决定如何解释字节。控制台并不总是按原样打印;某些字节甚至可能导致颜色变化或发出蜂鸣音 这取决于终端:我刚刚在Eclipse中尝试过,它再现了您的错误。在命令行上,它没有 我认为这是可以预料的,因为自C语言以来的大多数语言在内部使用\0空字节来表示字符串的结尾
多亏了已故的、伟大的丹尼斯·里奇(Dennis Ritchie),东西就是这样运作的。无法复制。下面是4张照片!s、 正如所料:你使用的是什么版本的JDK?@Matt Ball:我已经用我的环境信息更新了帖子。这是一个特定于实现的东西,还是OpenJDK/Eclipse中的一个bug?谢谢您是在IDE中运行,还是从命令行运行?它在OSX10.6上的EclipseIndigo中也适用。