2012-09-05 45 views
3

我正在使用一些在netty上實現的框架。我使用以下兩個選項從客戶端向服務器發送消息。我想這兩個片段應該向socket寫入相同的字節,它在服務器端的行爲是不同的。它有什麼不同?ByteBuffer vs ChannelBuffer

選項1:還好

ChannelBuffer buf = ChannelBuffers.buffer(1); 
buf.writeByte(0x1c); 
e.getChannel().write(buf); 

選項2:失敗

ByteBuffer buf = ByteBuffer.allocate(1); 
buf.put(0x1c); 
e.getChannel().write(ChannelBuffers.wrappedBuffer(buf)); 

回答

6

之前,你可以寫字節緩衝區的頻道,你得叫

buf.flip(); 

這使得可寫的字節。

+0

是的,現在它產生相同的結果。我在哪裏可以閱讀更多關於這個問題的性質。謝謝! –

+0

@NikolayKuznetsov您可以在[docs](http://docs.oracle.com/javase/6/docs/api/java/nio/Buffer.html#flip())中找到一個簡單的解釋 – sebastian