1.1 使用allocate()静态方法
ByteBuffer buffer=ByteBuffer.allocate(256);
以上方法将创建一个容量为256字节的ByteBuffer,如果发现创建的缓冲区容量太小,唯一的选择就是重新创建一个大小合适的缓冲区.
1.2 通过包装一个已有的数组来创建
如下,通过包装的方法创建的缓冲区保留了被包装数组内保存的数据.
ByteBuffer buffer=ByteBuffer.wrap(byteArray);
如果要将一个字符串存入ByteBuffer,可以如下操作:
String sendString="你好,服务器. ";
ByteBuffer sendBuffer=ByteBuffer.wrap(sendString.getBytes("UTF-16"));
2.回绕缓冲区
buffer.flip();
这个方法用来将缓冲区准备为数据传出状态,执行以上方法后,输出通道会从数据的开头而不是末尾开始.回绕保持缓冲区中的数据不变,只是准备写入而不是读取.
===================================
这个基本上都默认是1024吧,但也有特殊情况。它的值可以改变
windsock缓冲区大小默认为8192字节,尝试用API函数setsocketopt修改,似乎也修改成功了,代码如下:
VB code
Dim lResult As Long
Dim bufSize As Long
bufSize = CLng(1024) * 1024
lResult = setsockopt(Winsock1.SocketHandle, SOL_SOCKET, SO_RCVBUF, bufSize, 4)
If (lResult = SOCKET_ERROR) Then
MsgBox "Error setting SO_RCVBUF option: " & CStr(Err.LastDllError)
End If
lResult = setsockopt(Winsock1.SocketHandle, SOL_SOCKET, SO_SNDBUF, bufSize, 4)
If (lResult = SOCKET_ERROR) Then
MsgBox "Error setting SO_SNDBUF option: " & CStr(Err.LastDllError)
End If
bufSize = 0
lResult = getsockopt(Winsock1.SocketHandle, SOL_SOCKET, SO_RCVBUF, bufSize, 4)
If (lResult = SOCKET_ERROR) Then
MsgBox "Error getting SO_RCVBUF option: " & CStr(Err.LastDllError)
End If
'bufSize=1024*1024,说明设置成功
|