该程序从card.raw读取并创建一个jpg。我可以成功创建第一个图像,但我似乎无法弄清楚为什么我得到第二个图像的索引超出范围错误
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
public class Recoverytst {
public static void main (String[] args) throws IOException {
try {
FileInputStream fs = new FileInputStream("card.raw");
FileOutputStream os = new FileOutputStream("1.jpg");
byte[] fileContent = new byte[512];
while (fs.read(fileContent) != -1) {
os.write(fileContent);
}
fs.close();
os.close();
}
catch(IOException ioe) {
System.out.println("Error " + ioe.getMessage());
}
try {
FileInputStream fs2 = new FileInputStream("card.raw");
FileOutputStream os2 = new FileOutputStream("2.jpg");
byte[] fileContent2 = new byte[512];
while (fs2.read(fileContent2) != -1) {
无法弄清楚为什么我在下面的行
获得索引超出范围的错误 os2.write(fileContent2,513,512);
}
fs2.close();
os2.close();
}
catch(IOException ioe) {
System.out.println("Error " + ioe.getMessage());
}
}
}
答案 0 :(得分:0)
选择任意大小的字节数组(512)并且图像文件大小必须大于512时,这是正常的。
答案 1 :(得分:0)
你写了
os2.write(fileContent2,513,512);
这意味着每次执行时,您都试图从跳过513个字节的数组中写入512个字节,但该数组只有512个字节长。所以它不合适。
试试这个..
File file = new File("path to card.raw");
long len = file.length();
byte[] fileContent = new byte[len];
fs2.read(fileContent);
之后使用
os2.write(fileContent2,513,512);
仅将循环放在一边。它将从513字节开始写入512字节的数据。