ByteBuffer这个如何不定长?
用ByteBuffer byteBuffer=ByteBuffer.allocate(8);后,
byteBuffer.clear();
socketChannel.read(byteBuffer);
byteBuffer.flip();
如果每次读取的长度低于8,那后面就是乱码,如果长过8,直接就没了
如何能实现发送多少就正好度多少呢?请大家帮忙看下。

解决方案 »

  1.   

    你的想法是不对的
    对于socketChannel的read和write方法,是从网络读数据到buffer,和从buffer读数据发送到缓冲区
    从网络读数据到buffer,即read时,如果网络上的数据长于buffer的容量,会先只读取buffer剩余容量那么多,未读的数据不会丢失,你下次再使用read时,就能读出上次未读出的,如果网络上的数据没有缓冲区长,会只把网络上现有的放入缓冲区,缓冲区中有读入的长度,你可以只分析有效的数据。
      

  2.   

    那就和以前一样了。
    我还想用buffer一次缓冲进所有的,看来又要失望了。
    不过还是谢谢你。