我正在爲Java應用程序編寫一個插件。外部軟件與此應用程序建立TCP連接,並將消息作爲UTF-8編碼的JSON對象發送給我的插件。每條消息由分隔符分隔。我目前使用"\u00A1"
(¡
)作爲分隔符。Byte []輸入到Java掃描器
{ "message": "value" }¡{ "message": "value" }¡{ "message": "value" }...
由於TCP並沒有提供多少數據將在同一時間到達任何保證,該插件必須接收數據的這種流並拉出每一個人{ "message": "value" }
令牌。聽起來很好用java.util.Scanner
..
問題是,應用程序不提供我的插件直接訪問TCP套接字。該插件通過重複調用其方法receiveData(byte[] bytes)
來接收數據。我需要某種輸入流或通道,可以從Scanner
讀取,但我也可以將字節存入(來自receiveData
)。這樣的事情存在嗎?如果沒有,有什麼建議可以實施呢?或者我離開,有沒有更好的方法來處理這個問題?
注:我最初試圖手動實現這個邏輯。我會將每個接收到的字節塊解碼爲一個字符串,搜索分隔符並追加到StringBuilder
。然後我意識到這種方法是無效的,因爲傳入的byte[]
可能不會在偶數UTF-8字符邊界上結束並且不能正確解碼。我覺得Scanner
正是我想要的,我只是無法弄清楚如何提供它的輸入。
編輯:隨着應用程序的運行,數據會持續流式傳輸以更新顯示。不可能等到沒有更多數據開始解析。
基於這個問題,gson不會有幫助。 – DwB
那麼,使用Observer/Notifier模式實現'InputStream'。如果你願意,我可以稍後詳述。 –