Android中的套接字读取缓慢

时间:2014-04-02 03:49:59

标签: java android sockets dalvik

我是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上运行代码清楚地表明它不是由于套接字读取代码。

您能帮助我理解为什么我会看到这种显着的性能差异吗?我不确定如何解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该使用BufferedInputStream来提高阅读速度。或者,您可以使用Apache Commons IOUtils读取方法

答案 1 :(得分:1)

扔掉这一切并使用DataInputStream.readFully().它已经做了你想做的事情,但是正确的。

至于为什么它很慢,它不能比同行的写作更快。