首页 > 解决方案 > 如何将字节转换为int并与值进行比较

问题描述

所以我有一个值FFD8FFE0(jpg/jpeg 签名),我想检查上传的文件是 jpg/jpeg,但它返回 false

val param = new FileInputStream(f)
val cnt = param.available
val bytes = Array.ofDim[Byte](cnt)
println(param.read(bytes)==0xFFd8FFe0)

标签: javascala

解决方案


如果您真的不想使用 的便利性 DataInputStream.readInt,那么您可以通过以下方式检查 Java 中的前 4 个字节:

InputStream stream = new FileInputStream("example.jpg");
byte[] bytes = new byte[4];
stream.read(bytes);
byte[] expectedBytes = { (byte) 0xFF, (byte) 0xD8, (byte) 0xFF, (byte) 0xE0 };
System.out.println(Arrays.equals(expectedBytes, bytes));

在 Scala 中也是如此:

val stream = new FileInputStream("example.jpg")
val bytes = Array.ofDim[Byte](4)
stream.read(bytes)
val expectedBytes = Array(0xFF.toByte, 0xD8.toByte, 0xFF.toByte, 0xE0.toByte)
println(Arrays.==(expectedBytes, bytes)) 

推荐阅读