如果将视频或者音频的字节流解码成字符流,是否有可能出现任何字符?字节值是否可能为-1?

比如:new byte[]{-1}

byte b = (byte) in.read();

读到某一个字节b值为-1,并且属于视频或者音频的字节,有可能吗?

阅读 4.3k
2 个回答

当然可能!你试试用文本编辑器打开一个MP4视频文件,看看开头5-12字节是不是ftypmp42? 再比如任意一个zip压缩包,你打开前两个字节看看,是不是PK?(这是为了纪念它的发明人Philip Katz,使得无损压缩领域绝无可能被垄断)

对于任意一种二进制格式(除文本文件外的),基本都会按照以下套路存储文件:

Header + Data

Header部分基本都存在于文件开头部分若干的固定长度的字节,里面大部分内容都是纯文本内容,因此可以用文本编辑器直接看到这些内容,一般都是文件长度啊,作者信息啊,一些编码数据啊等等元数据信息。之后才是Data部分。

一些文件甚至还会包含Tail部分,表示文件已经结束了。比如jpeg就属于这一种。这也是早年流行一时的将压缩包隐藏到图片文件中的黑科技的原理。因为有Tail部分,所以图片浏览器就认为文件已经结束了,后面的部分不再视为图片,于是乎将压缩包追加到后面的文件内容中,可以被压缩工具识别到。

所以理论上,你完全可以将这些文件的头部存成一张大表,根据文件头的特征确定是什么文件。但目前你没必要自己这么做了,因为有人已经帮你整理好了,MIME了解一下?

是的,因为音视频都是压缩格式,出现0~255的任意字符都有可能

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题