gpt4 book ai didi

java - 如何在java中正确验证PNG header ?

转载 作者:行者123 更新时间:2023-12-04 08:21:03 30 4
gpt4 key购买 nike

我正在尝试编写一个函数来检查 PNG 文件是否未损坏。 Here我找到了一个函数,也在下面提供,它将文件字节存储到它自己的字节数组中。我知道 PNG 文件的前八个字节总是包含相同的十进制值 137 80 78 71 13 10 26 10(十六进制:89 50 4e 47 0d 0a 1a 0a)。
当我打印以 -1-40-1-3201674707370011007207200-1-370-124022222232235333565555686666681088888810101010101 ... 开头的字节数组的上下文时然后将其转换为十进制值我在开头看不到魔数(Magic Number)。请问,我误解了什么?我想读取图像并将其标题与十进制或十六进制值进行比较。

public static void main(String[] args)
{

File file = new File("src/resources/dog.png");

readContentIntoByteArray(file);
}
 private static byte[] readContentIntoByteArray(File file)
{
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];
try
{
//convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
for (int i = 0; i < bFile.length; i++)
{
System.out.print((char) bFile[i]);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return bFile;
}

最佳答案

正如@Andreas 所说,您将实际字节作为字符打印到终端,而不是以十进制或十六进制表示这些字节。
您可以使用以下方法检查标题:

        byte[] data = readContentIntoByteArray(file);
byte[] expected = new byte[] {-119, 80, 78, 71, 13, 10, 26, 10};
for (int i = 0; i < expected.length; i++) {
if (expected[i] != data[i]) {
System.out.println("mismatch at " + i);
}
}

关于java - 如何在java中正确验证PNG header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65499320/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com