2013-04-01 169 views
0

如何在沒有它的情況下向文件寫入二進制數來削減零。JAVA - 將二進制數寫入文件並讀取它

我寫這樣的:

byte[] b = new BigInteger("1011010101010110", 2).toByteArray(); 

FileOutputStream fos = new FileOutputStream("file",true); 
fos.write(b); 

但隨後例如:當我寫0000001,它的文件只是1寫入,而忽略了零,同樣的情況,如果我寫001001001000,它忽略左邊的零點從右到左讀取8位。

將二進制數字寫入文件的正確方法是什麼?如果這是正確的方法,我可能會嘗試以錯誤的方式讀取文件(我正在使用InputStream的read())

Ps-(8位必須是1個字節,所以寫爲字符串不是一個選項,導致每個數字是1個字節)。

+0

寫是一個字符串。嘗試http://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using-java,然後解析爲二進制 – jesantana

+0

out.write(「0001」 .getBytes()) – alphazero

+0

重複http://stackoverflow.com/questions/4421400/how-to-get-0-padded-binary-representation-of-an-integer-in-java – TC1

回答

0

你不想把它寫成一個二進制文件,你想把它寫成代表二進制文件的字符串。問題是Java沒有辦法知道你想要它填充。我建議你轉換二進制數的字符串,然後左鍵填充0(Apache的StringUtils的將與此幫助)

2

你可以嘗試這樣的事情

String s = "0000001"; 
    byte[] a = new byte[s.length()]; 
    for (int i = 0; i < s.length(); i++) { 
     a[i] = (byte) (s.charAt(i) & 1); 
    } 
+0

的,但這樣的,它需要我7個字節寫入一個文件..「0000001」只需要1個字節。 – CmchPt

+0

但是你說'當我寫入0000001時,它只在文件中寫入1,忽略了零' –

+0

是的,我知道,但是無法將0000001保存在1個字節中?沒有失去零點? – CmchPt