我正在从套接字读取消息(通过 TCP 协议),但我注意到 CPU 花费大量时间来调用我的 BufferedInputStream 的方法 available()。这是我的代码:
@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
我也尝试使用 intread=buffer.read()
和 checkif (read!=-1)
而不是使用可用函数,但在这种情况下,我无法识别消息的结尾......在我的 StringBuilder 'readCharacter' 中,我有不止一条消息,一条在另一个之后......它导致我的解析过程失败......
而是使用available()
检查,进入readCharacter
我一次只有一条消息......并且解析工作......
你能帮我理解为什么,以及如何避免 CPU 被吃掉吗?