私は最適化について助けが必要です。私はJAVAで作られたこのオープンソースのゲームサーバーを改良しようとしています。各プレイヤーは自身のスレッドを持っており、各スレッドは、このようなものになる:私はこのコードは愚かであることを何度も言われているソケットを1バイトずつ読み込み、これを変更する方法、最適化
BufferedReader _in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
String packet = "";
char charCur[] = new char[1];
while(_in.read(charCur, 0, 1)!=-1)
{
if (charCur[0] != '\u0000' && charCur[0] != '\n' && charCur[0] != '\r')
{
packet += charCur[0];
}else if(!packet.isEmpty())
{
parsePlayerPacket(packet);
packet = "";
}
}
をし、それをプロファイリングするとき、私は各バイトを読み取り、追加していることがわかりので、私は同意しますそれはpacket += ""
を使用しているだけで愚かで遅いです。
これを改善したいのですが、わかりません。私は何かを見つけることができると確信していますが、'\u0000
に基づいてパケットを分割する必要があるので、これよりもさらに遅くなるでしょう'、'\n'
、または'\r'
を使用して解析します。そして私は3回分裂するのが遅いことを知っています。
誰かが私にアイデアを与えることはできますか?これのコードですか?それは私の日になります。
あなたが説明するつもりならば、verryの簡単な言葉を使ってください。コード例で、私は単なるJAVA初心者です。ありがとうございました
IfあなたはビデオゲームのためのJava初心者のサーバーバックエンドです。私はあなたに幸運を祈っています。とてもたくさん! :) – cheeken
私は基本を持っていることを心配しないでください。私は長い間vb6プログラマでありました。私はちょうどこの1つで助けが必要です – Reacen
クイックコメント; ['StringBuilder'](http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html)を使用すると、遅い' packet + = charCur [0]; 'ループ(各ループに文字列を割り当てます) –