在我的應用程序中,我通過藍牙接收一個字節流。 我使用DataInputStream
從輸入流中一次讀取的字節固定金額:從InputStream讀取字節塊
private final InputStream mInStream = ...
...
DataInputStream dataInputStream = new DataInputStream(mInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}
我可以通過在BufferedInputStream
包裝mInStream提高性能,並把這個BufferedInputStream
到DataInputStream
? 例如:
private final InputStream mInStream = ...
...
BufferedInputStream buffInStream = new BufferedInputStream(mInStream);
DataInputStream dataInputStream = new DataInputStream(buffInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}
這種增益性能是否會提高?或者它會保持不變,因爲我正在從輸入流中讀取恆定數量的字節?
感謝
感謝您的回覆。我需要readFully,因爲我需要從字節流中解析固定長度的命令。通過readFully讀取的每個數據幀的長度至多爲128個字節。所以正如我理解的那樣,我應該創建長度爲128的緩衝區(因爲這是最大命令長度)?爲了獲得BufferedInputStrams的性能,這將是一個很好的尺寸? – Moonlit 2014-10-02 06:25:37
我認爲你應該在這種情況下使用'BufferedInputStream',是的。但我擔心'最多128字節'和'最大命令長度'。您需要使用*完全*預期長度的緩衝區,或者在每種情況下提供適當值的「長度」參數。如果你總是讀128個字節,你總是會得到128個字節,即使命令可以更短,這是'最多'意味着什麼。 – EJP 2014-10-02 06:34:40
好吧,我認爲這將是沒有問題的。因爲它是這樣的:在我開始數據傳輸之前,我知道將要發送的命令的長度。就像,在下一個數據流中,我會收到所有長度爲x的命令。所以我創建了長度爲x的緩衝區。並開始閱讀。因此,每個數據幀的長度都不會改變。當我重新配置應用程序時,我只是用另一個長度重新創建緩衝區數組,該長度等於要接收的新命令的長度,然後再次開始讀取。 – Moonlit 2014-10-02 06:48:49