Я читаю сообщения из сокета (через протокол TCP), но отмечу, что процессор тратит много времени на вызов метода available () моего BufferedInputStream.Это мой код:
@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
у меня только одно сообщение за раз .. и разбор работает ...
Можете ли вы помочь мне понять, почему и как избежать использования процессора?