【问题标题】:Why does FileInputReader.read() only reads 5 bytes at a time (Java)?为什么 FileInputReader.read() 一次只能读取 5 个字节(Java)?
【发布时间】:2013-11-23 13:08:46
【问题描述】:

好的,所以我一直在尝试使用 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),但是如果我把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

提前感谢您的帮助, 安德烈

【问题讨论】:

    标签: java byte java-io indexoutofboundsexception fileinputstream


    【解决方案1】:

    听起来你的数组长度不是实际上 1024。我知道你已经展示了用 1024 字节创建它的代码,但我怀疑你的实际代码要么在其他地方更改了值,要么它以不同的方式创建。

    如果您能展示一个简短但完整的程序来演示问题,那将会很有帮助,但如果做不到这一点,我将采取的第一个诊断步骤是查看array_bytes.length,无论是在调试器或通过日志记录。我强烈怀疑你会发现它是 5。一旦你确定了它,你需要弄清楚为什么它是 5,这与从输入流中读取的调用无关。

    还要注意这一行是根本错误的:

    number_bytesread += array_bytes.length;
    

    应该是:

    number_bytesread += nread;
    

    ...因为您刚刚阅读了nread 字节。您还发送了send_package,这似乎与您刚刚阅读的数据无关。

    此外,我建议您开始遵循 Java 命名约定,例如使用 arrayBytes 而不是 array_bytes。 (请注意,我只使用 bufferdata - 但我指出 Java 中的变量和名称通常是驼峰式而不是 using_underscores_for_word_breaks。)

    【讨论】:

    • 那行确实证明了数组长度确实是5.. number_bytesread+= array_bytes.length;关于命名约定,这是我第一次编写 Java 代码,也是我第一次使用 Stackoverflow(这个答案的格式确实很好......)。我使用 c 命名约定似乎这是我用来编码的唯一语言。谢谢我试着理解为什么 byte[] array_enviar = new byte[1024];有警告“该值从未使用过”
    • @Andre:这表明您没有使用该变量 - 您使用的是不同的变量。仔细检查一切,包括外壳!在命名约定方面,学习并遵循新语言约定的一个好处是,它可以强化信息,即它是一种不同的语言,具有不同的习语等。
    猜你喜欢
    • 2016-03-02
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多