2017-06-09 36 views
2

在用於插座下面的代碼,我聲明一個字節緩衝器而在一個循環中監聽客戶端的消息:將字節[]緩衝區重置爲零?

// Create some buffer 
byte[] buffer = new byte[512]; 

while (true) 
{ 
    // Listen for messages from Client 

    int length = socket.getInputStream().read(buffer); 

    if (length != -1) 
     System.out.println(new String(buffer)); 
    else 
     break; 

    // Reset buffer here to zeros? 
} 

每次我需要重置緩衝器的內容以接收新的消息。什麼是正確的方法來做到這一點?

+0

這不是接收通過串一種可靠的方法插座。不能保證一個完整的編碼字節數組將在單個'read()'調用中返回。使用'DataInput/DataOutput''readUTF()/ writeUTF()'或其他同樣可靠的東西。 –

+0

@JamesKPolk:或者我可以傳遞字節長度.. – user963241

+0

是的,這可以工作,特別是如果您使用'DataInput/DataOutput'方法,例如'readInt()/ writeInt()'和'readFully() '。 –

回答

3

你並不需要重置緩衝區,你需要一個String構造不晃過已接收字節的緩衝區部分的結尾:

if (length != -1) { 
    System.out.println(new String(buffer, 0, length)); 
} 

現在,您的代碼將即使緩衝區很髒也可以工作。

注意:爲了更好的便攜性,將所需的Charset傳遞給String構造函數。否則,您構造的String可能與通過套接字傳輸給您的字符串不匹配。

1

同意dasblinkenlight answers,而是要回答這個問題本身(如何復位數組),你可以使用Arrays.fill的值設置爲每一個細胞

byte[] array = new byte[10]; 
Arrays.fill(array, (byte)0);