比如:new byte[]{-1}
byte b = (byte) in.read();
读到某一个字节b值为-1,并且属于视频或者音频的字节,有可能吗?
比如:new byte[]{-1}
byte b = (byte) in.read();
读到某一个字节b值为-1,并且属于视频或者音频的字节,有可能吗?
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
当然可能!你试试用文本编辑器打开一个MP4视频文件,看看开头5-12字节是不是
ftypmp42
? 再比如任意一个zip
压缩包,你打开前两个字节看看,是不是PK
?(这是为了纪念它的发明人Philip Katz
,使得无损压缩领域绝无可能被垄断)对于任意一种二进制格式(除文本文件外的),基本都会按照以下套路存储文件:
Header
部分基本都存在于文件开头部分若干的固定长度的字节,里面大部分内容都是纯文本内容,因此可以用文本编辑器直接看到这些内容,一般都是文件长度啊,作者信息啊,一些编码数据啊等等元数据信息。之后才是Data部分。一些文件甚至还会包含
Tail
部分,表示文件已经结束了。比如jpeg
就属于这一种。这也是早年流行一时的将压缩包隐藏到图片文件中的黑科技的原理。因为有Tail
部分,所以图片浏览器就认为文件已经结束了,后面的部分不再视为图片,于是乎将压缩包追加到后面的文件内容中,可以被压缩工具识别到。所以理论上,你完全可以将这些文件的头部存成一张大表,根据文件头的特征确定是什么文件。但目前你没必要自己这么做了,因为有人已经帮你整理好了,
MIME
了解一下?