我是Android编程的新手,正在编写需要使用套接字编程的应用程序。我已经编写了套接字读取代码。我正在阅读大约14 MB的数据,以下是代码片段:
dataInputStream = new DataInputStream(client.socket.getInputStream());
int totalRead = 0;
while (totalRead < responseSize) {
int bytesRead = dataInputStream.read(buffer, totalRead, responseSize - totalRead);
if (bytesRead < 0) {
throw new IOException("Data stream ended prematurely");
}
totalRead += bytesRead;
}
我尝试在JVM和Dalvik(Android设备)上运行相同的代码。我发现这两者之间存在显着的性能差异。在JVM中,它需要大约17秒来读取数据,而在Android上需要超过40秒。请注意,我在这两个测试中使用相同的网络。
我无法理解这些显着的性能差异。最初,我认为这是由于套接字读取代码而我尝试了不同的读取方法,但我仍然得到相同的结果。 view this link for more details。在JVM上运行代码清楚地表明它不是由于套接字读取代码。
您能帮助我理解为什么我会看到这种显着的性能差异吗?我不确定如何解决这个问题。
谢谢。
答案 0 :(得分:1)
您应该使用BufferedInputStream来提高阅读速度。或者,您可以使用Apache Commons IOUtils读取方法
答案 1 :(得分:1)
扔掉这一切并使用DataInputStream.readFully().
它已经做了你想做的事情,但是正确的。
至于为什么它很慢,它不能比同行的写作更快。