2013-08-17 29 views
-1

我正在创建一个始终运行并侦听来自套接字的消息的android服务。但它不能很好地工作,我正在寻找一些nio替代品或教程。从套接字读取数据 - 没有性能

什么是全天候收听套接字的最佳方式?

AndroidAsync是否支持标准套接字? https://github.com/koush/AndroidAsync

有没有人使用Apache Mina?我与米娜有性格问题。 http://mina.apache.org/

或如何做这项工作,用良好的业绩非标准插座

等待您的经验。

感谢

回答

0

正常的方式来获得一个体面的插座性能(int read()write(int))是使用缓冲流/读/写器。这减少了系统调用的次数,并且使I/O在一次I/O时更快。

我不指望使用NIO会产生重大差异。如果问题没有缓冲,那么(IMO)可能是网络带宽和/或延迟问题。如果是这样的话,那么你在Java中可以做的事情就会有很大的变化。

-1

我有写作字符串的一些方便的方法与java.nio

private static Charset charset; 
static 
{ 
    charset = Charset.forName("UTF-8"); 
} 

public static void writeString(SocketChannel sc, String string) throws IOException { 
    CharBuffer c = CharBuffer.wrap(string); 
    ByteBuffer b = charset.encode(c); 
    b.compact(); 
    b.flip(); 
    sc.write(b); 
} 

public static String readString(SocketChannel sc) throws IOException { 
    ByteBuffer bbuf = ByteBuffer.allocate(8096); 
    sc.read(bbuf); 
    bbuf.flip(); 
    CharBuffer cbuf = charset.decode(bbuf); 
    return cbuf.toString(); 
} 

所有你需要做的是建立你的SocketChannel连接,您可以使用这些所有你想要的。 java.nio真是没那么难过,一旦你习惯了:)

+0

为什么你的缓冲区大小是8096?为什么你忽略流结束? – EJP

+0

我只是坚持一个任意数字在那里,它为我的目的工作。请解释流的结束? – Logan

相关问题