好的,所以我一直在尝试使用FileInputReader.read()读取一个(“任何”)二进制文件到byte []数组......但无论文件长度如何,它一次只读取5个字节... (顺便说一句,我使用udp发送数组/文件)
byte[] array_bytes = new byte[1024];
while((nread=file.read(array_bytes))!=-1){
number_bytesread += array_bytes.length;
socket_udp.send(send_package);
count += 1;
}
-send_package是一个使用array_bytes发送消息的数据报文
我试过使用函数read(byte [],offset,lenght),但是如果我把长度超过5,它会在第一次读取时出现这个错误,甚至认为文件肯定大于5个字节:
nread=file.read(array_bytes, 0, 1024);
因为我在阅读后立即发送,所以不需要抵消。
Exception in thread "main" java.lang.IndexOutOfBoundsException
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:272)
at udp_server2.UDP_Server2.Send_Udp(UDP_Server2.java:122)
at udp_server2.UDP_Server2.main(UDP_Server2.java:77)
Java Result: 1
提前感谢您的帮助, 安德烈
答案 0 :(得分:3)
听起来你的数组长度实际上 1024.我知道你已经显示了用1024字节创建代码的代码,但我怀疑你的实际代码是在其他地方更改了值,或者是它是以不同的方式创建的。
如果你能展示一个简短但完整的程序来证明这个问题会很有帮助,但如果不这样做,我要采取的第一个诊断步骤是查看array_bytes.length
,在调试器中或通过日志记录。我强烈怀疑你会发现它是5.一旦你确定了它,你需要找出为什么它是5,这与从输入流中读取的调用无关。 / p>
另请注意,这一行基本上是错误的:
number_bytesread += array_bytes.length;
应该是:
number_bytesread += nread;
...因为您刚读过nread
个字节。您还发送了send_package
,它似乎与您刚刚阅读的数据无关。
此外,我建议您开始遵循Java命名约定,使用arrayBytes
而不是array_bytes
。 (我只想使用buffer
或data
,但我要指出Java中的变量和名称通常是camelCased而不是using_underscores_for_word_breaks。)