如果我在一端的socket一次写比较多的字节如102400,在另一端用SocketChannel.read(ByteBuffer dst)方法(不管我ByteBuffer 空间分配多少)读取上面socket写的字节,它一次都只会读去一定的字节,然后在下次读取中继续读取剩余的字节,如此反复,直到把上面socket写的所有字节读完,有没有什么办法使我用SocketChannel.read(ByteBuffer dst)读取时能把另一端写入的字节数全部读完??

解决方案 »

  1.   

    Socket s;//
    InputStream in=s.getInputStream();
    public void readOver(ByteBuffer dst) IOthrows Exception
    {
    int readNum=0;//以经读取到的长度
    int buflength=dst.array().length;
    while(readNum<buflength)
    {
    int everyRead=s.read(dst.array(),readNum,buflength-readNum);
    if(everyRead==-1)return;//流结束了
    readNum+=everyRead;
    }
    }