您好,登錄后才能下訂單哦!
本文實例為大家分享了java實現兩個文件的異或運算的具體代碼,供大家參考,具體內容如下
以下代碼是將兩個大小相同的文件異或之后生成一個新的文件,具體思想是用FileInputStream方法讀取文件,以字節為單位對兩個文件進行異或運算,然后用FileOutputStream方法輸出文件,具體代碼如下:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Test { int i=0; static int count=0; public static void main(String[] args) throws IOException { //創建字節輸入流 FileInputStream filea = new FileInputStream("d:\\JavaXor\\a"); FileInputStream fileb = new FileInputStream("d:\\JavaXor\\b"); File outfile=new File("d:\\JavaXor\\outfile"); int filesizea=filea.available();//計算文件的大小 FileOutputStream fos=new FileOutputStream(outfile); byte[] bufa = new byte[1024]; //存放filea文件的字節數組 byte[] bufb = new byte[1024]; //存放fileb文件的字節數組 byte[] bufc = new byte[1024]; //存放兩個文件異或后的字節數組 byte[] buf_yu=new byte[filesizea%1024]; //存放文件異或的最后一部分,因為文件的大小可能不是1024的整數倍,如果繼續用bufc的話輸出的文件大小會比應有值大 //就是最后一個字節數組沒有放滿1024個字節 int hasReada = 0; int hasReadb = 0; //FileInputStream類的read()方法把讀取的流放在bufa中,并且返回字節的個數賦給hasReada //下面的函數就是將文件的最后一部分與其他部分分別對待 while( ((hasReada=filea.read(bufa))>0) && ((hasReadb=fileb.read(bufb))>0) ) { if(count<filesizea-filesizea%1024) { for(int i=0;i<bufa.length && count<filesizea-filesizea%1024;i++) { bufc[i]=(byte)((bufa[i]^bufb[i]) & 0xFF); count++; } fos.write(bufc); } else if(count>=filesizea-filesizea%1024 && count<filesizea) { for(int j=0; count>=filesizea-filesizea%1024 && count<filesizea ;j++) { buf_yu[j]=(byte)((bufa[j]^bufb[j]) & 0xFF); count++; } fos.write(buf_yu); } } System.out.println(count); filea.close(); //關閉輸入輸出流 fileb.close(); fos.close(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。