从套接字读取数据 - 没有性能

时间:2013-08-17 15:31:19

标签: java android sockets mina androidasync-koush

我正在创建一个始终运行并从套接字监听消息的android服务。但它不能很好地运行,我正在寻找一些nio替代或教程。

有史以来一直听套接字的最佳方法是什么?

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

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

或者我如何使用标准套接字以良好的性能完成这项工作

等待你的经历。

由于

2 个答案:

答案 0 :(得分:0)

从套接字(int read()write(int))获得良好性能的正常方法是使用缓冲流/读取器/写入器。这减少了系统调用的数量,并使I / O的字节或字符更快。

我不认为使用NIO会产生重大影响。如果问题不是缓冲,则(IMO)可能是网络带宽和/或延迟问题。如果是这种情况,你可以用Java做很多事情,这会产生很大的不同。

答案 1 :(得分:-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真的不那么难:)