有没有发现 android 的 socket 效率出奇的低?我一个InputStream.read(bytes) 都有可能长达300毫秒以上,有时候可以达到0.5秒. 简直了!!!!
这实在是太慢了,不可接受,不可接受.不可以接受!!!编码都是比较常规的socket编码. 就那几行socket也没什么特殊写法.
关键是他执行一个 InputStream.read(bytes) 为什么要那么长时间呢.

解决方案 »

  1.   

    我怀疑和OS有关,有些OS的硬件瞎搞些什么进去了!!!  NND出厂的时候自己测试一下行不行啊!!!!
      

  2.   

    难道大家都不深入开发socket应用吗?????
      

  3.   

    在android 的c/c++层使用过socket来从服务器上下载东西,感觉还可以,速度还行。Wifi内网情况下,2M的文件2秒钟就下载完了。java层的socket没有使用过。
      

  4.   


    不是的兄弟. 我要稳定的速率. 而不是 间歇性网速比如我就要 进行测试. 每次 的速度必须要保证在 10ms左右 而不能是部分会话用掉 300ms
      

  5.   

    真正的企业开发项目是不会用socket,可能会采用http或者别的,所以楼主就别在这里纠结了!
      

  6.   


    ...socket是个很常规的 类库,很多地方都用,太常规了. 谢谢.
      

  7.   

    可能是你的网络环境问题,这个不是Java的问题。所谓的网络延迟,有的时候非常高。
      

  8.   

    局域网.多台android机器实验.部分出现 比较严重的延迟.谢谢.
      

  9.   

    我碰到的问题不是 为什么会阻塞.而是问的  为什么 部分机型 阻塞的时间会那么长.按正常硬件指标来看  socket数据应该早都已经发到 server端android 机器上了.  那么 他这个read() 方法是无论如何都不可能阻塞300MS的. 除非硬件+OS的特殊限制.
    -----------
    有时候高达 500ms
    -----------
    同时,同样的程序 在极少数 CPU 性能并不是太好的机器上 却反而能够做到 <=10ms左右的阻塞
    我所说的这台 android 设备是台工程机,也没有什么品牌,反正具体的硬件参数是比较弱的.
      

  10.   

    试试用ndk,使用c封装socket操作成.so,然后用JNI方式在java层面调用。
      

  11.   

    我们通过NDK方式进行SOCKET通讯,底层通过包装UDP,为SO文件,给JAVA调用。采用UDX协议,包装成SO,供C++,JAVA调用。成熟方案。
      

  12.   


    如果你开发手机网游,用http简直就是笑话,用什么协议是看需求的
      

  13.   

    才看到这个问题
    LZ这个问题解决了吗?
    必须用   NDK c  jni 才能解决吗
      

  14.   

    解决了.
    是写法问题.  不要多次对 流进行写入,而直接一次性写入即可.比如不要 writeint... writebyte之类.而应该 write(byte[])