我的程序将文件读入字节数组,但我不知道为什么数组结果中有很多负数。我认为数组中的元素的值在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());
}
}
感谢您的帮助。
答案 0 :(得分:7)
Java byte
的范围是-128到127.有关详细信息,请参阅Java教程中的Primitive Data Types。
您对从InputStream
读取字节的两种方法感到困惑。
第一种方法是使用InputStream.read()方法一次读取一个字节。此方法返回int
(不是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位int
的低8位设置为byte
值的值,为您提供无符号值。