下面的代码被设计为需要一个字节[]和其他一些东西(请参阅它给出的代码)。然后它建立一定长度的数据包并返回。我的问题是,当我在一个文件中读入主程序时,我需要数据报数据包的缓冲区为剩余字节数(如果小于512)+4。这是处理读取请求的最后一个数据包的TFTP服务器。我在索引“buffer [bufferOffset] = data [dataOffset];”获得一个索引越界异常。任何人都可以帮助我理解为什么会发生这种情况,最好的解决办法是什么?IndexOutOfBounds - 需要帮助
public DatagramPacket doRRQ(byte[] data, int block, InetAddress address, int port, long fileSize, long sentBytes){
//takes file data and creates a buffer for a DATA packet to be used in a RRQ. This packet
//is passed to MyFirstTFTPServer.java to be modified and sent to client. This is done
int bufferOffset = 3;
int dataOffset = -1;
byte[] buffer = null;
long difference = 0;
int i = 512;
byte byteBlock = (byte)block++;//possible issue with block no increment. test.
if (sentBytes + 512 > fileSize){
difference = fileSize - sentBytes;
difference = difference + 4;
i = (int)difference;
buffer = new byte[i];
} else {
buffer = new byte[516];
}
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
buffer[0] = 0;
buffer[1] = 3;
buffer[2] = 0;
buffer[3] = byteBlock;
for(byte item:data){
bufferOffset++;
dataOffset++;
buffer[bufferOffset] = data[dataOffset];
//System.out.println(bufferOffset);
//System.out.println(dataOffset);
}
return packet;
}
请发布整个异常消息。至少要提及哪一个数组是破... – thkala
三个字母:jdb – Kevin
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:223.它还声明异常在RRQ.doRRQ()的第49行(这是我在上面的帖子中提到的那一行)。不会给出打破阵列的名称。我怀疑它的缓冲区,但是它具有可变长度。并且程序只在最后一个数据包上出现错误 – DMo