文件头魔数

很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)。
根据这几个字节的内容就可以确定文件类型,因此这几个字节的内容被称为魔数 (magic number)。

JPEG                             jpg;jpeg                      0xFFD8FF
PNG                              png                           0x89504E470D0A1A0A
GIF                              gif                           GIF8
TIFF                             tif;tiff                      0x49492A00
TIFF                             tif;tiff                      0x4D4D002A
AOL ART                          art                           0x4A47040E000000
AOL ART                          art                           0x4A47030E000000
PC Paintbrush                    pcx                           0x0A050108
Graphics Metafile                wmf                           0xD7CDC69A
Graphics Metafile                wmf                           0x01000900
Graphics Metafile                wmf                           0x02000900
Enhanced Metafile                emf                           0x0100000058000000
CAD                              dwg                           0x41433130
Outlook Express                  dbx                           0xCFAD12FE
MS Office/OLE2     doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db  0xD0CF11E0A1B11AE1
WordPerfect                      wpd                           0xFF575043
Quicken                          qdf                           0xAC9EBD8F
QuickBooks Backup                qbb                           0x458600000600
Sage               sly.or.srt.or.slt;sly;srt;slt               0x53520100
Lotus WordPro v9                 lwp                           0x576F726450726F
Lotus 123 v9                     123                           0x00001A00051004
Lotus 123 v5                     wk4                           0x00001A0002100400
Lotus 123 v3                     wk3                           0x00001A0000100400
Lotus 123 v1                     wk1                           0x2000604060
Windows Password                 pwl                           0xE3828596
ZIP Archive                      zip;jar                       0x504B0304
ZIP Archive (outdated)           zip                           0x504B3030
GZ Archive                       gz;tgz                        0x1F8B08
ARJ Archive                      arj                           0x60EA
MPEG                             mpg;mpeg                      0x000001BA
MPEG                             mpg;mpeg                      0x000001B3
Windows Media                    asf                           0x3026B2758E66CF11
ELF Executable                   elf;;                         0x7F454C4601010100 
Java-Class                      class                          0xCAFEBASE

转载于:https://www.cnblogs.com/relucent/p/6412548.html

### 如何用Java校验文件 在 Java 中,可以通过读取文件的前几个字节来验证其是一组特定的字节序列,通常位于文件头部,用于标识文件类型及其合法性。以下是实现这一功能的具体方法。 #### 的概念 是一个固定长度的字节组,用来唯一标识某种类型的文件。例如,在 Class 文件中,为 `0xCAFEBABE`[^2]。通过比较文件开头的字节与已知的,可以确认该文件是否属于预期类型。 #### 使用 FileInputStream 读取文件头并校验 下面提供了一个通用的方法,展示如何利用 `FileInputStream` 来读取文件的前几个字节并与预定义的进行匹配: ```java import java.io.FileInputStream; import java.io.IOException; public class MagicNumberValidator { public static final int CLASS_FILE_MAGIC = 0xCAFEBABE; /** * 校验文件。 * * @param filePath 文件路径 * @return 如果文件匹配,则返回 true;否则返回 false */ public static boolean validateMagicNumber(String filePath) { try (FileInputStream fis = new FileInputStream(filePath)) { byte[] magicBytes = new byte[4]; if (fis.read(magicBytes) != magicBytes.length) { return false; // 文件太短,无法读取足够的字节 } int magicValue = ((magicBytes[0] & 0xFF) << 24) | ((magicBytes[1] & 0xFF) << 16) | ((magicBytes[2] & 0xFF) << 8) | (magicBytes[3] & 0xFF); return magicValue == CLASS_FILE_MAGIC; } catch (IOException e) { System.err.println("Error reading file: " + e.getMessage()); return false; } } public static void main(String[] args) { String pathToClassFile = "example.class"; // 替换为实际的 .class 文件路径 boolean isValid = validateMagicNumber(pathToClassFile); System.out.println("Is the file a valid Class file? " + isValid); } } ``` 上述代码实现了以下逻辑: - 打开指定路径下的文件,并尝试从中读取前四个字节。 - 将这四个字节转换成整值以便于比较。 - 判断此值是否等于预设的 Class 文件 (`0xCAFEBABE`) 。 对于其他类型的文件(如 Excel),也可以采用类似的策略,只需替换对应的即可[^4]。 #### 注意事项 当处理大文件或网络流时,应特别注意资源管理问题,确保输入流被及时关闭以释放系统资源。此外,某些情况下可能还需要考虑异常情况的捕获和日志记录机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值