鍍金池/ 問答/Java  C++/ 如果將視頻或者音頻的字節(jié)流解碼成字符流,是否有可能出現(xiàn)任何字符?字節(jié)值是否可能為

如果將視頻或者音頻的字節(jié)流解碼成字符流,是否有可能出現(xiàn)任何字符?字節(jié)值是否可能為-1?

比如:new byte[]{-1}

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

讀到某一個(gè)字節(jié)b值為-1,并且屬于視頻或者音頻的字節(jié),有可能嗎?

回答
編輯回答
避風(fēng)港

當(dāng)然可能!你試試用文本編輯器打開一個(gè)MP4視頻文件,看看開頭5-12字節(jié)是不是ftypmp42? 再比如任意一個(gè)zip壓縮包,你打開前兩個(gè)字節(jié)看看,是不是PK?(這是為了紀(jì)念它的發(fā)明人Philip Katz,使得無(wú)損壓縮領(lǐng)域絕無(wú)可能被壟斷)

對(duì)于任意一種二進(jìn)制格式(除文本文件外的),基本都會(huì)按照以下套路存儲(chǔ)文件:

Header + Data

Header部分基本都存在于文件開頭部分若干的固定長(zhǎng)度的字節(jié),里面大部分內(nèi)容都是純文本內(nèi)容,因此可以用文本編輯器直接看到這些內(nèi)容,一般都是文件長(zhǎng)度啊,作者信息啊,一些編碼數(shù)據(jù)啊等等元數(shù)據(jù)信息。之后才是Data部分。

一些文件甚至還會(huì)包含Tail部分,表示文件已經(jīng)結(jié)束了。比如jpeg就屬于這一種。這也是早年流行一時(shí)的將壓縮包隱藏到圖片文件中的黑科技的原理。因?yàn)橛?code>Tail部分,所以圖片瀏覽器就認(rèn)為文件已經(jīng)結(jié)束了,后面的部分不再視為圖片,于是乎將壓縮包追加到后面的文件內(nèi)容中,可以被壓縮工具識(shí)別到。

所以理論上,你完全可以將這些文件的頭部存成一張大表,根據(jù)文件頭的特征確定是什么文件。但目前你沒必要自己這么做了,因?yàn)橛腥艘呀?jīng)幫你整理好了,MIME了解一下?

2018年7月11日 14:24
編輯回答
任她鬧

是的,因?yàn)橐粢曨l都是壓縮格式,出現(xiàn)0~255的任意字符都有可能

2017年10月31日 03:07