反转 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("..."));
我编写了一个程序,它输入一个文件,反转字节并将其写入另一个文件。然后。它反转反转的文件并将其输出到另一个文件中。但是,最后,当我应该再次获取相同的文件时,它又损坏了。我已经搜索过了,但找不到解决方案。
反向代码有效。我已经测试过了。 如果你告诉我我在做什么,我会很高兴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("..."));