如何檢查java.io.InputStream
(來自File
,URL
,..)的數據是否屬於JSON類型?如何確定InputStream是否包含JSON數據?
當然是完整最好是先裝載流的全部數據,並嘗試驗證它作爲JSON(例如檢查用於閉合支架}
)。由於流源可能非常大(一個大小爲500MB的GeoJSON文件),因此最終會在刻錄機中結束。
爲了避免這種情況,我寫一個小方法,該方法只對InputStream
爲UTF-8/16/32和試驗的第一個字符,如果它是根據RFC 4627(其由RFC 7159參照及更新),以確定一個{
其JSON性質:
JSON文本應以Unicode編碼。默認編碼是UTF-8。
和:
由於JSON文本的前兩個字符永遠是ASCII字符 [RFC0020],有可能確定一個八位組 流是否是UTF-8,UTF- 16(BE或LE)或UTF-32(BE或LE),前四個八位字節中的空值模式爲 。
00 00 00 xx UTF-32BE
00 xx 00 xx UTF-16BE
xx 00 00 00 UTF-32LE
xx 00 xx 00 UTF-16LE
xx xx xx xx UTF-8
的方法是:
public static boolean mightBeJSON(InputStream stream) {
try {
byte[] bytes = new byte[1];
stream.read(bytes);
if (bytes[0] == 0x7B) {
return true;
}
stream.read(bytes);
if (bytes[0] == 0x7B) {
return true;
}
stream.read(bytes);
stream.read(bytes);
if (bytes[0] == 0x7B) {
return true;
}
} catch (IOException e) {
// Nothing to do;
}
return false;
}
直到現在我的機器仍然不燃燒,而是:
- 有什麼不對這種方法/實現?
- 在某些情況下可能會有問題嗎?
- 有什麼需要改進的地方?
RFC 4627 **已過時**。請參考[RFC 7159](http://rfc7159.net/rfc7159)。 –
我跟着你的鏈接[RFC 7159](http://rfc7159.net/rfc7159)。我是唯一一個不信任使用不是[普通,未格式化文本]的網站的RFC(https://www.rfc-editor.org/rfc/rfc7159.txt)? :D –
是的,這只是你! ;-) –