0

サーバー (PC 上で実行されている) と通信する必要がある Android アプリに取り組んでいますが、これも私が作成したものです。問題は、 InputStream.read() が永遠にかかり、200kb の処理に約 30 秒かかることです。ガベージ コレクションが何らかの形で関与している可能性があります。ループ中に時々呼び出されますが、リストされている遅延はわずか 2 または 3 ミリ秒であり、全体でおそらく 20 ミリ秒なので、それは問題ではないと思います。

私のコード:

client = new Socket("192.168.1.1", 1235);
client.setTcpNoDelay(true);
client.setReceiveBufferSize(1048576);
InputStream is = client.getInputStream();

byte[] buffer = new byte[1048576];
int i = 0;
int length = -1;

while (true)
{
    int b = is.read();
    if (b == -1)
    {
        success = false;
        break;
    }
    buffer[i] = (byte) b;

    if (i == length)
        break;

    if (i == 3)
    {
        length = buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24;
    }

    i++;
}

私はJavaの経験があまりなく、Androidプログラミングの初心者であるため、なぜそれほど遅いのかわかりません。

4

2 に答える 2