如何将字节数组转换为整数数组

2022-09-02 05:14:04

我正在使用以下方法读取文件:

int len = (int)(new File(args[0]).length());
    FileInputStream fis =
        new FileInputStream(args[0]);
    byte buf[] = new byte[len];
    fis.read(buf);

正如我在这里发现的。是否可以转换为 ?将 转换为 会占用更多空间吗?byte array bufInt ArrayByte ArrayInt Array

编辑:我的文件包含数百万个整数,例如,

100000000 200000000 .....(使用普通的 int 文件 wirte 编写)。我把它读到字节缓冲区。现在我想把它包装到IntBuffer数组中。如何做到这一点?我不想将每个字节转换为int。


答案 1

您在注释中说过,您希望输入数组中的四个字节对应于输出数组上的一个整数,因此效果很好。

取决于您期望字节是大端顺序还是小端顺序,但是...

 IntBuffer intBuf =
   ByteBuffer.wrap(byteArray)
     .order(ByteOrder.BIG_ENDIAN)
     .asIntBuffer();
 int[] array = new int[intBuf.remaining()];
 intBuf.get(array);

完成,分三行。


答案 2

将字节数组的每 4 个字节转换为整数数组:

public int[] convert(byte buf[]) {
   int intArr[] = new int[buf.length / 4];
   int offset = 0;
   for(int i = 0; i < intArr.length; i++) {
      intArr[i] = (buf[3 + offset] & 0xFF) | ((buf[2 + offset] & 0xFF) << 8) |
                  ((buf[1 + offset] & 0xFF) << 16) | ((buf[0 + offset] & 0xFF) << 24);  
   offset += 4;
   }
   return intArr;
}