3 回答

TA貢獻1883條經驗 獲得超3個贊
這段代碼有多個問題:
Int
每次做測試時,您都在閱讀新內容您正在嘗試
Int
針對 6 字節值測試 4字節字節順序在小端處理器上是錯誤的
下面是一個示例,說明如何構造此代碼。
def checkPhotoType(file: File): Option[String] = {
val param = new DataInputStream(new BufferedInputStream(new FileInputStream(file)))
val bytes = (1 to 6).map( _ => param.readByte).toList
bytes match {
case List(0xFF, 0xD8, 0xFF, 0xDB, _, _) =>
Some("jpg/jpeg")
case List(0x47, 0x49, 0x46, 0x38, 0x37, 0x61) =>
Some("GIF87a")
case List(0x47, 0x49, 0x46, 0x38, 0x39, 0x61) =>
Some("GIF89a")
case _ =>
None
}
}

TA貢獻1875條經驗 獲得超5個贊
if (param.readInt() == 0xFFd8FFe0 | param.readInt() == 0xFFd8FFe1 )
Some("jpg/jpeg")
if(param.readInt() == 0x474946383961L)
Some("gif")
你繼續int從param. 把它放在一個變量中:
int magic = param.readInt();
if (magic == 0xFFd8FFe0 | magic == 0xFFd8FFe1 )
Some("jpg/jpeg")
if(magic == 0x474946383961L)
Some("gif")
盡管正如DawoodIbnKareem指出的那樣,magic == 0x474946383961L永遠不會為真,因為常量是 int 范圍之外的 long 值。所以,你需要讀取更多的數據來匹配這個。

TA貢獻1825條經驗 獲得超6個贊
除了第一個答案之外,您還可以將十六進制字符串轉換為整數,如下所示:
String hex = "aa" int value = Integer.parseInt(hex, 16);
或更大的數字
BigInteger bigValue = new BigInteger(hex, 16);
添加回答
舉報