在Java中反转文件(图像,音乐)会破坏文件

时间:2015-06-26 14:29:38

标签: java file bytearray reverse corruption

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

倒车代码正常工作。我测试了它。 如果你告诉我我做错了什么/失踪,我会很高兴。

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;
}

2 个答案:

答案 0 :(得分:0)

我想你不需要在计算字节数时添加字节值b。

替换

sum += b;

通过

sum++;

答案 1 :(得分:0)

写完所有关闭fos后。这可确保将所有内容写入磁盘。

然后从文件中读取字节,其中存在一个简单的函数:

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