【问题标题】:Java - read method in FileInputStream - Why the numbers are different in read() and in read(byte[] b)?Java - FileInputStream 中的读取方法 - 为什么 read() 和 read(byte[] b) 中的数字不同?
【发布时间】:2017-08-25 16:45:12
【问题描述】:

read() 方法返回一个 int 表示数据的下一个字节,而 read(byte[] b) 方法不返回任何内容,它将字节数据值分配给作为参数传递的数组。

我用图像文件做了一些测试,我采取了两种方法:

  • 打印read()方法返回的结果,直到这个结果为-1(这意味着已经到达文件末尾)。

  • 创建一个字节数组并将其作为 read(byte[] b) 方法的参数传递,并打印分配给该字节数组的数字。

我注意到两种情况的结果是不同的:第二种情况,由于结果是字节类型,数字不大于127或小于-128;例如,在第一种情况下,我发现了大于 200 的数字。

由于两种情况下的文件相同,并且这些数字代表该文件的数据,这两种情况下的数字不应该相同吗?

我还使用 FileOutputStream 将文件的数据写入另一个新文件,在这两种情况下,新文件具有相同的字节并且看起来相同(正如我所说,它是一个图像)。

谢谢。

【问题讨论】:

  • 真的确定read(byte[] b)不会返回任何东西吗?

标签: java byte fileinputstream fileoutputstream


【解决方案1】:

由于 Java 只有签名数据类型,read(byte[] b) 读取常规字节,即-128-127。但是read() 返回一个int,因此它可以用-1 指示流的结束,从0-255 返回无符号 字节值。

byte b = (byte)in.read(); // Provided that stream has data left

会给你一个无符号字节,看起来就像你在 byte[] b 中得到的值。

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 2011-04-10
    • 2015-05-30
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多