从字节缓冲区获取整数时的ArrayIndexOutOfBoundsException

时间:2014-11-29 20:54:14

标签: java arrays udp byte bytebuffer

我正在尝试通过UDP发送一个28KB的文本文件,其中包含8字节的前置标头,其中包含发送的每个数据包的序列号和数据包大小。当尝试发送数据包大小为1000字节的文件时,在接收到8KB的文件后,当从包含我的字节数组的字节缓冲区中运行获取int行时,我得到ArrayIndexOutOfBoundsException:

packetSize = buff.getInt();

客户端代码如下:

         FileOutputStream fos =  null;
         fos = new FileOutputStream(sDstPath);
         FileChannel fc = fos.getChannel();

         while(dataBytesRcvd <= fileSize)
         {
             if((fileSize - dataBytesRcvd) < (packetSize - 8))  //added to adjust last packet's size
                 packetSize = fileSize - dataBytesRcvd + 8;
             DatagramPacket packet = new DatagramPacket(bytes, packetSize, dp.getSocketAddress());
             ds.receive(packet);
             ByteBuffer buff = ByteBuffer.wrap(bytes);
             seqNum = buff.getInt();
             seq[seqNum]=1;
             packetSize = buff.getInt();
             dataBytesRcvd += (packetSize-8);
             fc.write(buff);
             buff.clear();
         }

应该注意的是,将字节数组大小增加到比数据包大小多4个字节,也没有任何帮助。它可能有什么问题?

0 个答案:

没有答案