Fedora Eclipse - io流中的空字符

时间:2011-05-18 00:16:45

标签: java eclipse fedora

我在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

提前感谢您的帮助。

1 个答案:

答案 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

希望这有帮助。