2013-02-22 74 views
0

我試圖將純文本數據轉換爲二進制格式,以便它變得不可重寫。 需要將數據寫入文件。如果我在控制檯窗口中打印它,並且無法讀取原始文本,轉換將起作用。 但是,當它寫入文件時,會顯示相同的原始文本。 如何將這個二進制數據寫入文件,而不加密它,但使其不可讀?文本到二進制轉換和寫入文件。請幫助

該文件稍後需要由另一個接受二進制數據的第三方工具處理。這就是爲什麼我無法使用自己的算法對它進行加密。

這是我的代碼:

import java.io.*; 
import java.lang.*; 
public class convert{ 
public static void main(String args[]){ 
String s= "This is text"; 
try{ 
File file= new File("test.php"); 
file.createNewFile(); 
FileWriter fw= new FileWriter(file.getName(), true); 
BufferedWriter bw= new BufferedWriter(fw); 

byte[] b= s.getBytes(); 
for(int x=0; x<b.length; x++){ 
byte c=b[x]; 
bw.write(c); 
System.out.println(c); 
} 

bw.close(); 
}catch(Exception e){ e.printStackTrace(); } 
}//main 
}//class 
+0

有可能是一個更好的解決方案,但嘗試使用'bw.write(Byte.toString(C));''而不是bw.write(C);' – MadProgrammer 2013-02-22 04:09:42

+0

我不知道這個問題是有道理的。如果你不打算加密你的文件,你打算如何使它成爲一個二進制文件?現在你所做的就是將字符串轉換爲UTF-8字節數組,然後將字節轉換爲字符(一個壞主意)並寫出來。這個第三方工具期望什麼格式? – 2013-02-22 04:09:49

+0

爲什麼不使用BinaryWriter? – 2013-02-22 04:25:01

回答

1

明文本身以二進制格式,其中每個字節被解釋爲一個字符(或其它變體,這取決於假設或指定的編碼,例如UTF-8, UTF-16 ...)。

這意味着如果您將ASCII字符作爲字節寫入文件,它看起來將是相同的,並且可以被任何人讀取。事實上,很多的二進制文件格式仍保存字符串作爲正常字節,這意味着在十六進制編輯器打開時,他們可以讀,比如這裏: hex editor

什麼,你需要做,使之不可讀是將其序列化成一些不可讀的通用格式。不幸的是,Java中的正常序列化是可讀的,但您可以檢查here以瞭解如何掩蓋它。您也可以使用ZIP或類似的壓縮算法。

另一種更加詭異的方法是將所有字符字節移動一些已知值。這將導致他們成爲一個不同的角色,這將是不可讀的。這可以被看作是一個非常基本的Caesar Chipher

但最終,所有重要的是您的目標程序能夠讀取哪些格式。

+0

謝謝你的所有意見和答案。我會嘗試一些建議,然後發佈。謝謝 – jeet 2013-02-22 10:39:42

0

那麼你可以使用RandomAccessFile來做到這一點。它變得容易。

RandomAccessFile raf = new RandomAccessFile(path,permissions); //permissions are r,w,rw. The usual ones. 
raf.seek(0); //this will set the pointer to first position. 
raf.writeUTF(what ever you want to write to file); 

//to read the file use readUTF() 
raf.seek(0); //you can read from a part of file using this seek method. 
System.out.println(raf.readUTF());