2017-05-26 113 views
-1

我有一個學校,我必須使一個應用程序通過網絡工作的任務。我們可以用Java或C(或兩者)來完成。 我們已經給出了一個確切的協議來在計算機之間進行通信。 下面是該協議的消息的一個示例:字節從網絡到字符串

[REGIS␣id␣port␣pass+++] 

在這個消息,標識必須恰好在8個字節,端口上的4個字節,通過對2個字節,REGIS上的5個字節和+++上3個字節。 要閱讀此消息,我使用InputStream對象和read()方法,所以我得到一個byte []數組。

我的問題是:我可以直接從byte []數組構造一個String對象,並使用正則表達式來檢查消息是否正確構造?

其他問題是:我可以做一個字符串包含我的消息,並使用String.getBytes()通過網絡發送一個字節數組[]?

我的問題是關於編碼:我確定它會爲每個字符1個字節?如果消息被C程序讀取,我不會有問題嗎?

謝謝你的幫助!

+3

「我可以直接從byte []數組構造一個String對象」 - 從字面上有一個構造函數爲。你有沒有嘗試過任何東西? – f1sh

+0

是的我知道這是一個構造函數,我的問題是:我可以這樣做,並確保我仍然有正確數量的字節轉換之間? – StuYYY

+1

正則表達式適用於String,它由字符組成,而不是字節。所有字節序列都不是有效字符串,字節如何轉換爲字符取決於所選的字符集(又名編碼)。你爲什麼不讀一下你期望的字節數(22)?如果您讀取了22個字節,您怎麼能知道一條消息無效?因爲您對字節的內容沒有任何限制?我看到的唯一無效情況是:1.您收到少於22個字節,然後關閉套接字; 2.你應該收到N條消息,但收到的字節數不是22的倍數。 –

回答

1

我的問題是:可以我直接從 byte []數組構造字符串對象,並使用正則表達式來檢查該消息是否是正確構建的 ?

當然可以,String類有一個構造函數,需要byte [],然後應用適當的正則表達式來檢查消息是否有效

另一個問題是:我可以使包含我的消息的字符串,並使用 String.getBytes()通過網絡發送一個字節數組[]?

是的,你可以,如果你想知道如何通過網絡發送的文件字節look this

+0

是的,我知道如何做這些事情,我沒有問代碼,我問這是否是一個正確的方法來做到這一點?但是,謝謝你的回答 – StuYYY

+0

如果你得到0x10 0x09 0x01字節會怎麼樣?然後,直接從字節轉換爲字符串,而不需要對字符集進行任何假設?根據輸入,這可能工作或不工作。 – BigMike