我有一个小字节数组(25K以下),我收到并解码为更大的消息信封的一部分.有时这是一个图像,当它是图像时,有时它是一个jpg.我没有字节数组以外的上下文信息,并且需要识别它是否是图像,以及图像是否为jpg类型.
是否有一些神奇的数字或魔术字节存在于开头,结尾或某些偏移处,我可以看一下来识别它?
我的代码示例如下(来自内存,而不是c/p):
byte[] messageBytesAfterDecode = retrieveBytesFromEnvelope();
if(null != messageBytesAfterDecode && messageBytesAfterDecode > 0){
if(areTheseBytesAJpeg(messageBytesAfterDecode)){
doSomethingWithAJpeg(messageBytesAfterDecode)
}else{
flagEnvelopeAsHavingBadContentInTheField();
}
}
Run Code Online (Sandbox Code Playgroud)
我真的需要做什么
areTheseBytesAJpeg(byte[] mBytes){}
Run Code Online (Sandbox Code Playgroud)
方法,甚至指向详细说明的规范的指针.我希望有一个非常快速的方法来做出这个决定,因为我真的不想把它们读成图像等.
zsa*_*ank 55
来自维基百科:
JPEG图像文件以FF D8开头,以FF D9结束.
http://en.wikipedia.org/wiki/Magic_number_(programming)
RAT*_*THI 13
一些关于jpeg的其他文件格式的额外信息:文件的初始值包含这些字节
BMP : 42 4D
JPG : FF D8 FF EO ( Starting 2 Byte will always be same)
PNG : 89 50 4E 47
GIF : 47 49 46 38
Run Code Online (Sandbox Code Playgroud)
一些代码:
private static Boolean isJPEG(File filename) throws Exception {
DataInputStream ins = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
try {
if (ins.readInt() == 0xffd8ffe0) {
return true;
} else {
return false;
}
} finally {
ins.close();
}
}
Run Code Online (Sandbox Code Playgroud)
关于幻数(包括JPEG文件)的"知识"的另一个来源是magic
GNU/Linux file
命令使用的文件.
如果您安装了file
命令,那么file --version
将告诉您magic
文件所在的位置,并且您可以使用文本编辑器阅读它...并仔细阅读man 5 magic
.
(magic
文件内容确认其他答案的详细信息.)
小智 6
引用这个维基百科文章:
JPEG图像文件以FF D8开头,以FF D9结束.JPEG/JFIF文件包含"JFIF"(4A 46 49 46)的ASCII代码,作为空终止字符串.JPEG/Exif文件包含"Exif"(45 78 69 66)的ASCII代码,也作为空终止字符串,后跟有关该文件的更多元数据.
归档时间: |
|
查看次数: |
32434 次 |
最近记录: |