サーバー (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プログラミングの初心者であるため、なぜそれほど遅いのかわかりません。