-1

我的程序将文件读​​入字节数组,但我不知道为什么数组结果中有很多负数。我认为数组中的元素的值在 0 到 255 之间。这里的代码:

public static void main(String [] args)
    {
        try
        {
            File file = new File("C:\\1.mp3");
            FileInputStream fis = new FileInputStream(file);
            byte[] bytes = new byte[(int)file.length()];
            fis.read(bytes);
            boolean check = true;
            int i = -1;
            while(check)
            {
                i=i+1;
                if(bytes[i]<0)
                {
                    check = false;
                    System.out.println("There is a negative number.");
                }
            }
        }
        catch(IOException ex)
        {
            System.out.println(ex.getMessage());
        }
    }

感谢您的帮助。

4

1 回答 1

8

Javabyte的范围为 -128 到 127。有关更多信息,请参阅Java 教程中的原始数据类型

您对从InputStream.

第一种方法是使用InputStream.read()方法一次读取一个字节。此方法返回一个int(不是 a byte),该值具有读取的值(范围 0-255)或 -1 以指示已到达流的末尾。该int类型是 Java 中带符号的 32 位值。

第二种方法是示例代码中所做的,使用InputStream.read(byte[])一次读取多个字节。此方法将byte数组作为参数,并返回一个int指示读取的字节数,如果已到达流的末尾,则返回 -1。这些byte值的范围为 -128 到 127,因为该byte类型在 Java 中是带符号的 8 位值。

如果您需要第二种方式的无符号值,您可以通过执行以下操作进行转换:

byte b = ...; //element in the byte array read from stream
int i = b & 0xFF;

这会将 32 位的低 8 位设置为int值中的byte值,从而为您提供无符号值。

于 2013-04-11T03:22:28.867 回答