我正在從套接字讀取消息(通過TCP協議),但我注意到CPU花了很多時間調用BufferedInputStream的available()方法。這是我的代碼:BufferedInputStream available()吃CPU
@Override
public void run()
{
Socket socket;
Scanner scanner;
BufferedInputStream buffer = null;
try
{
socket = new Socket(SERVER_HOST, SERVER_PORT);
System.out.println("Connection Completed");
InputStream inputStream = socket.getInputStream();
buffer = new BufferedInputStream(inputStream);
StringBuilder readCharacter;
while (true)
{
readCharacter = new StringBuilder();
try
{
while (buffer.available() > 0)
{
readCharacter.append((char) buffer.read());
}
}
catch (IOException e)
{
e.printStackTrace();
buffer.close();
}
String array[] = separe(new String(readCharacter));
... //parsing the message
我也試着使用int read=buffer.read()
和檢查if (read!=-1)
而不是使用現有的功能,但在這種情況下,我不能夠識別郵件的末尾...在我的StringBuilder的'readCharacter'我有一個以上的消息,一個接一個..它導致我的解析過程失敗...
而不是使用available()
檢查,到readCharacter
我只有一個消息在一段時間..和解析工程...
你能幫我理解爲什麼,以及如何避免是否吃CPU?
那麼,嘗試使用.read()方法解析while循環。 – nullpotent
嗨你的意思是保持available()檢查或使用read()!= - 1?然而,我已經嘗試了兩種方法,但它們不起作用 – marco
有一個常見的誤解,你可以暗示消息開始和結束時數據之間的暫停。您不能發送字節流的消息,只能發送字節。您只能通過閱讀內容來確定消息何時開始和結束。 –