2013-08-17 35 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

相關問題