java - 如何将字节转换为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)
解决方案
如果您真的不想使用 的便利性
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))
推荐阅读
- ruby-on-rails - Rails - 数据库迁移最佳实践
- ios - 如何在静态 TableViewCell 中显示 UICollectionView?
- xpath - scrapy 和 xpath:如果父元素包含文本,则获取子元素中的文本
- wordpress - 图片不显示在其他页面上
- java - 禁用状态栏和导航栏
- kotlin - 重复功能的目的
- ansible - 如何使用 ansible 启动具有不同子网 ID 的多个实例
- php - 如何使用 PHP 将 HTML 表单数组插入 mySQL 中的数据库行
- r - 展开 data.table 的多列包含
- 观察
- python - 为什么整数总是为真