2011-05-18 93 views
1

我在Eclipse中遇到了一個非常奇怪的問題,我不確定它是一個錯誤還是一些設置錯誤。Fedora Eclipse - io流中的空字符

我使用的Fedora的Eclipse在Fedora 14

在Eclipse文本編輯器中打開帶有空字符的文件,當我第一次注意到這個問題。在到達第一個空字符後,不再顯示其他字符。此外,如果文件包含空行後的新行,則null和newline之間的所有內容都不顯示,但在換行符後正確恢復。

例子:

#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

如果用'\ 0'替換'null'字符會怎麼樣? – Bhushan 2011-05-18 00:38:57

+0

中的空字符是文件,只是0x00的字節值\ 0。 – jjg4 2011-05-18 01:00:29

回答

1

我認爲你錯誤地解釋了輸出,即字符串是如何在屏幕上呈現的。因爲如果你使用一些奇怪的字體,任何普通的字符串都會顯得很奇怪一個普通的unicode字符串在一個語言環境中看起來不同,但另一個不同。即使是正確渲染的unicode字符串,其中包含例如Devnagari角色對於以前從未見過這些角色的人來說看起來很陌生。因此,空字符可能看起來很奇怪。這可能是因爲它不是您想要首先顯示的角色。此外,空字符不是字符串終止符(正如您可能在考慮歸因於C/C++)。 Java確實處理它。

作爲一個簡單的測試,只需在Java程序中打印'\ 0',看看你得到了什麼輸出,'null'或其他奇怪的東西。 :)

從Java文件:

打印

public void print(String s) 

打印的字符串。如果參數爲空,則打印字符串「null」。否則,根據平臺的默認字符編碼將字符串的字符轉換爲字節,並且這些字節的寫入方式與write(int)方法完全相同。 參數:

s - The String to be printed 

希望這會有所幫助。

+0

嘿,顯然它只是渲染,儘管我仍然不確定Eclipse爲什麼會隱藏null字符和行尾之間的所有內容:/。 – jjg4 2011-05-18 02:17:59