我在Eclipse中遇到了一个非常奇怪的问题,我不确定它是否是一个错误,或者某些设置是否错误。
我在Fedora 14上使用Fedora Eclipse。
在eclipse文本编辑器中打开包含空字符的文件时,我首先注意到了这个问题。达到第一个空字符后,不再显示其他字符。此外,如果文件在null之后包含一个新行,则不显示null和换行符之间的所有内容,但在换行符后正确恢复。
示例:
#A file with values:
66 6F 6F 00 62 61 72
#Displays:
foo
#When it should read something like:
fooNULLbar
如果在Eclipse中运行程序时没有扩展到I / O,这只会是一个小麻烦。如果我尝试使用InputStream或Reader读取前一个示例中的文件,则会导致文件在null之前结束。
示例:
# File: test
66 6F 6F 00 62 61 72
# File: Test.java
import java.io.File;
import java.io.FileInputStream;
public class Test {
public static void main( String[] args ) {
try {
File file = new File( "test" );
FileInputStream in = new FileInputStream( file );
int b;
while ( ( b = in.read() ) != -1 ) {
System.out.print( (char) b );
}
in.close();
} catch ( Exception e ) {
System.err.println( e.getMessage() );
}
}
}
# Produces output to Eclipse console:
foo
# While when run from command line, it produces:
fooNULLbar
当我打开这些文件或在Eclipse之外运行这些程序时,一切正常,包括在Eclipse中编译的程序。
我在谷歌搜索问题时遇到过这个问题,但我不确定这是否是同一个问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=283231
提前感谢您的帮助。
答案 0 :(得分:1)
我认为您正在错误地解释输出,即字符串在屏幕上的呈现方式。因为如果使用某种奇怪的字体,任何普通字符串都会显得很奇怪常规的unicode字符串在一个语言环境中看起来不同,但在另一个语言环境中看起来不同即使是正确渲染的unicode字符串,例如包含Devnagari角色对于从未见过那些人的人来说会很奇怪。因此,null字符可能看起来很奇怪。这可能是因为它不是您想要首先显示的角色。此外,null字符不是字符串终止符(正如您可能认为的由于C / C ++)。 Java确实正确处理它。
作为一个简单的测试,只需尝试在Java程序中打印'\ 0',看看你得到了什么输出,'null
'或奇怪的东西。 :)
来自Java Doc:
打印强>
public void print(String s)
打印一个字符串。如果参数为null,则打印字符串“null
”。否则,字符串的字符将根据平台的默认字符编码转换为字节,这些字节的写入方式与write(int)
方法完全相同。
参数:
s - The String to be printed
希望这有帮助。