Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-为什么readAllBytes返回不正确的字节码?_Java_Byte_Bytearray - Fatal编程技术网

Java-为什么readAllBytes返回不正确的字节码?

Java-为什么readAllBytes返回不正确的字节码?,java,byte,bytearray,Java,Byte,Bytearray,我有以下问题。我正在使用Java从一个文件创建一个字节数组。因此,我做了以下工作: byte[] myByteArray = Files.readAllBytes(filename); 但是,对于许多字节,它返回的值不正确/为负值 例如,如果我使用javascript进行测试,读取文件的每个字节,例如 function readbytes(s){ var f = new File(s); var i,a,c; var d = []; if (f.isop

我有以下问题。我正在使用Java从一个文件创建一个字节数组。因此,我做了以下工作:

byte[] myByteArray = Files.readAllBytes(filename);
但是,对于许多字节,它返回的值不正确/为负值

例如,如果我使用javascript进行测试,读取文件的每个字节,例如

    function readbytes(s){
    var f = new File(s);
    var i,a,c;
    var d = [];
    if (f.isopen) {
        c = f.eof;
        for(i=0;i<c ;i++){ 
            a = f.readbytes(1); 
            d.push(a);
        }   
        f.close();
        return d;
    } else {
        post("could not open file: " + s + "n");
    }
}
函数读取字节数{
var f=新文件;
变量i,a,c;
var d=[];
if(f.isopen){
c=f.eof;

对于(i=0;iJava不知道无符号字节。例如,无符号字节255将作为其有符号版本-1打印。但是,在内存中,实际值将相同并表示为255

如果要将字节转换为无符号表示,可以使用按位AND运算符

例如:

bytes[x] & 0xff
Java在运行时也不知道可能推送到Java虚拟机堆栈上的任何操作数的字节数。事实上,应用于整数值的每个操作都会产生一个整数。这就是为什么
((字节)-1)&0xff)
生成一个整数,其值为255。如果要将该值存储回一个字节,则必须再次将其转换为
字节,当然是-1

byte x = -1; // java is friendly enough to insert the implicit cast here
System.out.println(x); // -1
System.out.println(x & 0xff); // 255
byte y = (byte)(x & 0xff); // must add (byte) cast
System.out.println(y); // -1

还请记住,从技术上讲,您看到的输出是不同的,但内容仍然相同,因为您可以始终从Java的有符号字节映射到其无符号表示形式。理想情况下,您可以使用类似于
DataInputStream
的东西,它为您提供
int readUnsignedByte()

Java不知道无符号字节。例如,无符号字节255将作为其有符号版本-1打印。但是,在内存中,实际值将相同并表示为255

如果要将字节转换为无符号表示,可以使用按位AND运算符

例如:

bytes[x] & 0xff
Java在运行时也不知道可能推送到Java虚拟机堆栈上的任何操作数的字节数。事实上,应用于整数值的每个操作都会产生一个整数。这就是为什么
((字节)-1)&0xff)
生成一个整数,其值为255。如果要将该值存储回一个字节,则必须再次将其转换为
字节,当然是-1

byte x = -1; // java is friendly enough to insert the implicit cast here
System.out.println(x); // -1
System.out.println(x & 0xff); // 255
byte y = (byte)(x & 0xff); // must add (byte) cast
System.out.println(y); // -1

还请记住,从技术上讲,您看到的输出是不同的,但内容仍然相同,因为您可以始终从Java的有符号字节映射到其无符号表示形式。理想情况下,您可以使用类似于
DataInputStream
的东西,它为您提供
int readUnsignedByte()

不,但它与
有符号的
值有关,因为Java没有无符号值(禁用
char
)。不,但它与
有符号的
值有关,因为Java没有无符号值(禁用
char
).Hi Joa,我想知道如何转换为无符号字节?我希望最终得到与javascript中相同的int数组。是否有方法循环遍历字节数组并将每个值更改为无符号等效值?您始终可以创建一个新的整数数组,并手动复制所有值。int[]ubytes=new int[bytes.length];for(int i=0;i