2012-02-17 93 views
2

我試圖解析一個UTF 16編碼的JSON文件,但是我遇到了一個奇怪的問題。InputStreamReader,FileInputStream開始解析文件在中點而不是開始

每當我使用FileInputStream,解析文件似乎開始在中點。例如,如果文件長度爲40個字符,它將從字符20開始。這會導致解析JSON時出現錯誤,顯然它的數據從文件中的字符0開始。

儘管工作了幾個星期,但這一問題在前一天出現。我可以看到我的代碼沒有問題,因爲在問題開始前幾天沒有更改。

我嘗試過的一種解決方法是切換到使用FileReader。它通常以字符0開始,但它不能處理文檔中的UTF-16字符,所以不能解決問題。

我正在使用Google的Gson庫來處理JSON,但是我認爲問題在InputStreamReaderFileInputStream之內。

下面是有爭議的代碼;

JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16")); 
reader.beginArray(); 
... 

這是它引發的錯誤。上面的行reader.beginArray();導致異常。

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 21 
    at com.google.gson.stream.JsonReader.expect(JsonReader.java:337) 
    at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:304) 
    at reader.ProofDatabase.load(ProofDatabase.java:130) 
    ... 

這裏是我的部分工作不處理UTF-16個字符串

JsonReader reader = new JsonReader(new FileReader(file)); 
reader.beginArray(); 
... 

任何解決方案,無論是修復原來的問題,或的文件作爲UTF-16中讀另一種方法將會更受歡迎。

+0

JSON文件是否以字節順序標記開頭?它是如何產生的? – Joni 2012-02-17 16:25:38

+0

我目前使用的文件是手動創建的。就像我在有效的json中手動輸入一樣。前一個文件是使用gson庫中的'JsonWriter'類生成的。 – 2012-02-17 16:48:55

+0

你使用了什麼編輯器? – Joni 2012-02-17 16:50:51

回答

0

當我找到解決方案時忘了更新問題。

錯誤來自我手動創建JSON文件而不是以編程方式生成它的事實。

當文件由JSONWriter類生成時,額外的元數據被添加到告訴解析器它是JSON文件的文件中。這個元數據在手動創建的文件中缺失,所以JSONReader在解析文件時拋出錯誤。

相關問題