反转 Java 中的文件(图像、音乐)会损坏文件

Reversing a file(image,music) in Java corrupts the file

我编写了一个程序,它输入一个文件,反转字节并将其写入另一个文件。然后。它反转反转的文件并将其输出到另一个文件中。但是,最后,当我应该再次获取相同的文件时,它又损坏了。我已经搜索过了,但找不到解决方案。

反向代码有效。我已经测试过了。 如果你告诉我我在做什么,我会很高兴wrong/missing。

try {
        URL image = new URL(path);
        fis = image.openStream();
        fos = new FileOutputStream(output);
        while (-1 != (b = fis.read(bytes))) {
            sum += b;
            System.out.println("Bytes being written: " + b);
            fos.write(bytes, 0, b);
        }
        JOptionPane.showConfirmDialog(null, "File " + new File(output).getAbsoluteFile() + " successfully downloaded.\n File size in bytes is :" + sum);
        //Algorithm part
        cSum = sum;
        System.out.println("Byte size=" + sum);
        sum = 0;
        cBytes = new byte[cSum];
        revBytes = new byte[cSum];
        bais = new ByteArrayInputStream(cBytes);
        revBytes = CDIP.algo(cBytes);
        fos = new FileOutputStream("Reversed" + output);
        while (-1 != (b = bais.read(revBytes))) {
            sum += b;
            System.out.println("Reversed bytes being written: " + b);
            fos.write(revBytes, 0, b);
        }
        JOptionPane.showConfirmDialog(null, "File successfully reversed! Size(in bytes): " + sum);

---反转方法

private static byte[] algo(byte[] text) {
    if(text==null) {
        return null;
    }
    int length = text.length;
    for (int i = 0; i <= length / 2; i++) {
        byte temp = text[length - i - 1];
        text[length - i -1] = text[i];
        text[i] = temp;
    }
    return text;
}

我想当你需要计算字节数时,你不应该添加字节值 b。

替换

sum += b;

来自

sum++;

写完全部关闭fos。这确保所有内容都写入磁盘。

然后从文件中读取字节,为此有一个简单的函数:

byte[] bytes = Files.readAllBytes(Paths.get("..."));