我有一個來自黑匣子的輸入流(比如說B)。從這個流進入的所有消息都是序列化的二進制數據,每個消息都以四個字節的int開頭。它大部分是日誌記錄數據,每天運行24小時。我用readInt()方法讀取這四個字節。現在,偶爾,主線程會退出EOFException,並使程序崩潰。如何在輸入字節流上設置readInt()塊?
經過研究,我發現它發生在readInt()時輸入流中少於四個字節時發生。我的猜測是緩衝區在連續讀取之間的填充速度不夠快。我正在考慮的一些可能的解決方案包括在讀取之前檢查available()(考慮數據量時消耗太多週期),或者在發生異常時重啓(聽起來像編程不佳)。如果只有我可以阻止使用readInt(),我認爲這將是最好的方式。我已經看過readInt()的實現,但它又歸結爲使用read()進行阻塞。
任何人都知道更好的解決方案嗎?
您似乎通過生成文本牆來阻止閱讀流程;-)引入一些段落可能會使其更具可讀性(並有助於獲得答案)。 – 2011-02-03 14:32:27
`readInt()`的方法是什麼? – axtavt 2011-02-03 14:37:51
你讀什麼樣的流? – 2011-02-03 14:49:06