最近在研究nio,头有点大了。简单的传输已经实现问题不大,复杂点的就蒙了。
大家知道J2ME是没有nio的,我的程序是从手机客户端向服务端传送数据。
数据是有一定格式含义的。J2ME端用的是DataOutputStream向服务端写数据。
服务端用ByteBuffer缓冲接收,如何重新组装并解析成有意义的数据。
麻烦高手给个例子吧。谢谢。

解决方案 »

  1.   

    比如客户端向服务端这样写数据:SocketConnection sc = (SocketConnection) Connector.open("socket://127.0.0.1:8888");
    DataOutputStream dos = new DataOutputStream(sc.openOutputStream());
    dos.writeInt(1);
    dos.writeUTF("abcdefghijklmnopqrstuvwxyz");
    ......服务端的ByteBuffer缓冲区大小又比较小ByteBuffer buffer = ByteBuffer.allocate(10);如何组装数据,并且实现类似于DataInputStream类似的功能?
      

  2.   

    这 10 个容量的 Buffer 放不下的,把容量放大一些吧。
      

  3.   

    你可以定义数据的开始和结束符号,这样,一段数据可以分成几次传送。你可以用ascii的标准定义来做开始和结束符号,0x01表示数据开始,0x00表示结束。
      

  4.   


    int remaining = buffer.remaining();
    if(remaining >= 6 && buffer.getShort(4) + 6 == remaining){
       int id = buffer.getInt();
       byte[] b = new byte[buffer.getShort()];
       buffer.get(b);
       String s = new String(b,Charset.forName("UTF-8"));   .....
    }
      

  5.   

    fix:if(remaining >= 6 && buffer.getShort(4) + 6 <= remaining)
      

  6.   

    问下大家
    假设是要提供10万级同时在线的,支持上传文件的服务器。
    一般来说ByteBuffer缓冲开辟多大合适?
    1024吗。
      

  7.   

    1024一个包都装不下, 用1500吧, 一般MTU是1500
      

  8.   

    楼主的客户端发送数据是否是并行的?
    你需要考虑如果不同的客户端数据同时到达以后,buffer里的数据需要区别对待。
    或者不同的channel过来的数据需要等待完成之后做处理。个人意见,没有完全明白楼主的意思。