本文介紹了在Java中編輯二進制文件的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我需要做這個項目,從其中讀取一個二進制文件,然后創建一個新的二進制文件,該文件根據偏移量添加00。例如,如果二進制數的偏移量為02,則該二進制數將移位2。因此,二進制數的偏移量為04。中間有00。
我正在考慮使用隨機訪問文件來訪問和編輯(只讀)。但我被您要查找的字節數搞糊涂了。另外,如何編輯修改內容并將其放入全新的文件中。
致以最誠摯的問候
推薦答案
在上圖中。藍色(0x54)
的第一個字節位于0x40 + 0x0E
。將左側的行值與列值相加。因此,您必須讀取除該字節以外的所有內容。因此,這將被補償0x40 + 0x0D
。那將是64 + 13 = 77
。由于偏移量從0
開始,因此請讀入前78
字節,然后寫出您想要的內容。然后寫出文件的其余部分。這意味著所有的藍色都將寫在您的特殊插入之后。
這一切都是假定的,這就是你想要做的。但是您不能真正使用seek
,因為這意味著您正在修改源文件,這是不明智的(因為您可能會犯錯誤,需要重新開始)。此外,搜索正在修改的文件可能會非常有問題,因為它的大小可能會不斷變化。無論如何,請確保保留該文件的備份副本。
若要進行進一步修改,請按說明繼續讀取和寫入。
這里有一個暴力的例子。可以適當地使用Try-with-Resources和循環來改進它。例外情況被推定為受到監控。此示例僅在指定位置插入兩個三元組整數,并打印新文件。
// create a file to start
FileOutputStream fo = new FileOutputStream("myfile.txt");
String alpha = "abcdefghijklmnopqrstuvwxyz";
fo.write(alpha.getBytes());
fo.close();
// create the new output file and open up the old one as an input
// file
fo = new FileOutputStream("myfile2.txt");
FileInputStream fi = new FileInputStream("myfile.txt");
// insert 123 after k
byte[] buf = new byte[100];
int count = fi.read(buf, 0, 11); // read up to and including k
fo.write(buf, 0, count);
fo.write("123".getBytes());
// insert 456 after t
count = fi.read(buf, 0, 9);
fo.write(buf, 0, count);
fo.write("456".getBytes());
//copy rest of input file to output file
while ((count = fi.read(buf, 0, 10)) > 0) {
fo.write(buf, 0, count);
}
fo.close();
fi.close();
fi = new FileInputStream("myfile2.txt");
byte[] buffer = fi.readAllBytes();
for (byte b : buffer) {
System.out.print((char) b);
}
System.out.println();
fi.close();
}
這篇關于在Java中編輯二進制文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,