【发布时间】:2013-04-05 09:32:04
【问题描述】:
我正在开发一个需要与服务器(在我的 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 编程方面完全是初学者,所以我不知道为什么它这么慢。
【问题讨论】:
-
建议:如果你想在Android中做一个服务器-客户端应用程序,我强烈建议你检查一些middleware,它会为你做通信,例如。 Apache Thrift.
标签: java android networking client inputstream