2015-04-28 41 views
0

我有一個程序需要讀取和寫入文件中的RGB值。但是,我遇到了一個應用程序的問題,我從文件中讀取的數據與我正在寫入的數據不同。將字節寫入文件然後讀取會生成不同的字節

程序:

public static void main(String[] args) throws Exception { 
    FileOutputStream fos = new FileOutputStream(new File("ASDF.txt")); 
    fos.write(0xFF95999F); 
    fos.flush(); 
    fos.close(); 
    FileInputStream fis = new FileInputStream(new File("ASDF.txt")); 
    byte read; 
    while((read = (byte) fis.read()) != -1) { 
     System.out.print(String.format("%02X ", read)); 
    } 
    fis.close(); 
} 

輸出:

9F 

回答

1

字節是8位,這意味着它的最大的255可以存儲(或128如果簽名)。當你調用fos.write(0xFF95999F)時,它會將它轉換爲一個字節,這意味着它除去最後兩個數字(十六進制)。如果您需要寫入多個字節,則需要將整數轉換爲一個字節數組。如a related SO article所示,類似

ByteBuffer b = ByteBuffer.allocate(4); 
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN. 
b.putInt(0xFF95999F); 

byte[] result = b.array(); 
fos.write(result); 
... 

應該對您更好。 (爲什麼FileOutputStream接受一個int而不是一個字節我無法回答,但我想這是一個愚蠢的原因,爲什麼一些獲得列表的getCookie方法返回null而不是空的列表... premature優化,他們現在堅持。)

+0

空白列表和缺席列表之間有區別。在您提到的情況下返回空列表只適用於cookie標頭沒有值的情況。 – EJP

+0

好吧,我的意思是getCookies(http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html#getCookies%28%29)...請注意,沒有getCookie方法HttpServletRequest這是該API的另一個煩惱。 – Foon