ソケットから (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
read=buffer.read()
また、利用可能な関数を使用する代わりに intと checkを使用しようとしましif (read!=-1)
たが、この場合、メッセージの終わりを認識できません...私の StringBuilder 'readCharacter' には、複数のメッセージがあります。他の後..そしてそれは私の解析プロセスの失敗を引き起こします...
available()
チェックを使用する代わりに、readCharacter
一度に1つのメッセージしかありません..そして解析が機能します...
その理由と、CPU の消費を回避する方法を理解するのを手伝ってもらえますか?