gpt4 book ai didi

java - IndexOutOfBounds - 需要帮助

转载 作者:行者123 更新时间:2023-11-29 05:59:26 26 4
gpt4 key购买 nike

下面的代码旨在获取一个 byte[] 和其他一些东西(参见它提供的代码)。然后它构建一个具有一定长度的数据包并返回它。我的问题是,当我将文件读入主程序时,我需要数据报包的缓冲区为剩余要发送的字节数(如果小于 512)+ 4。这是为了处理读取请求的最后一个数据包TFTP 服务器。我在行“buffer[bufferOffset] = data[dataOffset];”上得到一个索引越界异常。任何人都可以帮助我理解为什么会发生这种情况以及解决它的最佳方法是什么?

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;

}

最佳答案

我没看到你在哪里查看过 data.length。 data.length 是否有可能大于 sentBytes?如果是这样,您的循环应该超过 sentBytes,而不是超过数据。

基本上,您决定 buffer 的缓冲区长度的逻辑似乎与 sentBytes 的大小可疑地分离。

关于java - IndexOutOfBounds - 需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com