Cómo determinar si un archivo es un archivo binario, implementado usando código Java
Hay muchos formatos de imagen y el sufijo de una imagen. El archivo no es No se puede decir cuál es el formato real de la imagen, entonces, ¿cómo obtener el formato de la imagen? Pensé en algunos métodos simples y efectivos, que consisten en leer el identificador del encabezado del archivo de imagen. Sabemos que las imágenes en varios formatos tienen diferentes identificadores de encabezado, por lo que podemos identificar el formato de la imagen determinando el identificador del encabezado.
Analicé los identificadores del encabezado del archivo en varios formatos. No solo encontré información relevante, sino que también utilicé un editor hexadecimal para ver el encabezado del archivo de la imagen. , para su referencia.
1.JPEG/JPG
-
Identificador de encabezado de archivo (2 bytes): $ff, $d8 (SOI) (carácter identificador de archivo JPEG)
- Identificador de fin de archivo (2 bytes): p>
-
Identificador de encabezado de archivo (6 bytes) 47 49 46 38 39(37)
61
G I F 8 9
(7) a
5.BMP
- Identificador del encabezado del archivo
(2 bytes) 42 4D
B
PCX
- Identificador de encabezado de archivo (1
byte) 0A
7.TIFF
- Identificador del encabezado del archivo (1 byte) 0A
8 .TIFF
- Identificador del encabezado del archivo (1 byte) 0A
9.TIFF
- Identificador del encabezado del archivo (1 byte) 0A
10.TIFF
10.TIFF/iTIFF
- Identificador del encabezado del archivo (2 bytes)
4D 4D o 49
49
8. - Identificador de encabezado de archivo (8 bytes) 00 00 01 00 01 00 20 20
9.CUR
- Identificador de encabezado de archivo (8 bytes) 00 00 02 00 01 00 20 p>
20
10.p>4D
F O R M
11.ANI
- Identificador de encabezado de archivo (4 bytes )
52 49 46
46
R I F F
Basado en la colección de estos identificadores de encabezado, puedo escribir un módulo que reconozca el formato de la imagen. Pero antes de escribir el módulo, puede optimizar la colección de identificadores de encabezado para minimizar la cantidad de comparaciones de cadenas en su programa.
1.JPEG Sabemos que necesitamos comparar los dos caracteres en el encabezado $ff,
$d8 en lugar de leer los dos últimos identificadores de cola.
2.TGA, ICO y CUR solo necesitan comparar el tercer y quinto carácter.
3.PNG compara [89][50] caracteres.
4.GIF compara [47][49][46] y el quinto carácter.
No es una tontería, use el flujo de memoria para determinar el formato del archivo. De hecho, juzgar los primeros bytes del archivo puede simplemente determinar qué tipo de archivo es, por ejemplo
.jpg El archivo
es FFD8 (el D8FF que se invertirá de menor a mayor es el mismo que se muestra a continuación)
El archivo BMP es 424D
--4D42
No enumeraré los demás uno por uno. Si desea saber qué caracteres se utilizan al principio de más tipos de archivos, descargue un editor hexadecimal, como C32asm o UE, y. puedes verlo.