[英]How to get data from TCP socket into a ByteBuffer
我需要從套接字獲取傳入的數據到ByteBuffer中,但我不知道該怎么做。 我是該領域的新手,因此不確定最好的入門方法。 我發現了以下內容,但這不是我想要的,因為它可以使數據保持一致,但是我需要將所有數據放在字節緩沖區中以用於其他目的。
ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort));
while (true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("Received: " + clientSentence);
setRequestDataFromCT(clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
此代碼將讀取所有字節並將其存儲在ByteBuffer中,您可能必須調整bufferSize來存儲所需的所有數據。
int bufferSize = 8192;
ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort));
while (true) {
Socket connectionSocket = welcomeSocket.accept();
ByteBuffer bf = ByteBuffer.allocate(bufferSize);
BufferedInputStream inFromClient = new BufferedInputStream(connectionSocket.getInputStream());
while (true) {
int b = inFromClient.read();
if (b == -1) {
break;
}
bf.put( (byte) b);
}
connectionSocket.close();
}
int count = SocketChannel.read(ByteBuffer).
不知道為什么不使用SocketChannels
為什么要添加'socketchannel'標記,但這是這樣做的方法。
ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort));
while (true) {
Socket connectionSocket = welcomeSocket.accept();
InputStream stream = connectionSocket.getInputStream();
byte[] data = new byte[1024];
int count = stream.read(data);
ByteBuffer bb = ByteBuffer.allocate(data.length);
bb.put(data);
bb.flip();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.