我有臨危以下類型的消息的網絡套接字:(每秒約24)讀取線和字節[]從輸入流
命令EG:
[Pos,1,2,3,4,1,2,3,4]\n
圖片:
[IMG,36000]\nbyte[36000]
(字節[36000]爲36000個字節的數組)
因此,我需要一個讀卡器該流,其能夠讀取線和字節[]。問題是,BufferedReader轉換字符集,這對圖像來說非常非常糟糕,所以讀取字符串並將其轉換爲字節似乎不是一種選擇。
我試圖將一個DataInputStreamReader和一個BufferedReader連接到流中,但它似乎在讀取器第一次更改後中斷,但我不確定導致該問題的原因。
顯而易見的解決方案是:
char c;
String s = "";
do{
c= (char)read.read(); //maybe charset conversion here
s+=c;
}while(c!= "\n");
if(s.startsWith("[IMG")){
int len = Integer.parseInt(s.split(",")[1]);
byte[] img = new byte[len];
read.read(img);
...
但是我正在尋找一個更好的,我需要較少的手動操作。
- 什麼是處理這個問題的推薦方法?
- 有沒有方法 連接兩個或更多的讀者到輸入流?
- 有讀者可以讀取字節[]和字符串?
- 將所有內容寫入byte []並讀取它可能更容易嗎? (我怎麼知道,什麼時候停止閱讀?)
- 我可以防止混亂字節[]的圖表類型轉換嗎? (然後我可以使用緩衝閱讀器)
在最簡單的情況下,我可以寫代碼:(這實際上是沒有太大的:d)
String s = read.readLine();
String[] parts = s.split(",");
if(parts[0].equals("[IMG")){
byte[] img = new byte[Integer.parseInt(parts[1])];
read.readByte(img);
...
問題是,我每秒會收到至少24條這樣的消息,因此即使接受所有消息的部分也變得困難,我仍然需要讀取幀並檢查它們的行結束符,如果它們包含一個,我可以解析該命令,然後讀取指定的長度,並將其餘的緩衝區添加到讀取數據的前面,這是我想要省下的努力。 –
HTTP會有類似Content-Type這樣的空行的標題行,然後是二進制或文本數據。 –