2012-09-06 75 views
1

我有一個Java應用程序,從一堆文本文件(約值50克)讀取。每個文件的大小從5kb到35mb。這些文件本身是從另一個Java應用程序創建的,該應用程序按需運行,但未在一週內運行。該文件使用多個分隔符,如SSD損壞可能會更改txt文件中的字符嗎?

| ; ,

我的應用程序已經運行良好,但最近開始拋出一個數字格式的懷疑錯誤。經審查我看到逗號的一個已經被翻轉到$

0.43916,22970.43081,6.76182 $ 527640691.38786,| 10,

我的問題是這樣的。這可能是因爲驅動器損壞而發生這種「翻轉」?看起來有點牽強,整個文件中只有一個字符會改變。文件上的時間戳驗證它不是由另一個程序「意外」修改的。

我真的在撓撓我的腦袋。

+1

生成文件的應用程序更有可能存在導致將無效值寫入文件的錯誤,尤其是因爲它是單個字符被更改的。驅動器損壞很可能會影響更多的數據。 (這真的不是一個編程問題,它更像是一個操作系統/硬件問題,在這裏並不是真正的主題。) –

+0

由於硬件或編譯器錯誤(或從宇宙射線的位翻轉)很少有人認爲他們應該幾乎不會因爲問題而受到指責。我已經開發了十多年的企業級Java代碼,並且從來沒有遇到過這些問題之一成爲錯誤的根源(留出XML處理器問題:-))。然後再一次,這是紡金屬而不是硅。 –

回答

1

原來,這是驅動器腐敗。跑了CHKDISK,並提出了錯誤。

2

這不太可能,但絕對有可能。事實上,只有一位必須在(00100100)和$(00101100)之間變化。磁盤通常包含內置校驗和和糾錯代碼等內容,以便在發生損壞時能夠糾正錯誤,或者至少讓錯誤發生。但是,沉默的腐敗並不是前所未聞的,並且很可能在SSD與傳統硬盤驅動器之間發生。

不過,第一個看的地方肯定是生成該文件的代碼。

+2

我會說*非常不可能,特別是在可預見的,經常性的情況下。 –