2016-10-05 29 views
1

由於writeByte()的目的在兩個類中都是相同的。但是兩者都寫了不同的內容。爲什麼通過DataOutputStream的writeByte()和ObjectOutputStream的writeByte()編寫的字節不同?

import java.io.*; 
class First 
{ 
     public static void main(String[] args) throws IOException 
     { 
       FileOutputStream fos = new FileOutputStream("b.txt"); 
Line 1:   ObjectOutputStream oos = new ObjectOutputStream(fos); 
Line 2:   DataOutputStream oos = new DataOutputStream(fos); 
       oos.writeByte(65); 
       oos.close(); 
       FileInputStream fis = new FileInputStream("b.txt"); 
       int x=0; 
       System.out.println("Output"); 
       while((x=fis.read())!=-1) 
       { 
         System.out.println(x); 
       } 
       fis.close(); 
     } 
} 

如果1號線已被註釋掉,輸出爲:

65 

若2號線已被註釋掉,輸出爲:

172 
237 
0 
5 
119 
1 
65 

爲什麼這種差異?

+4

閱讀[ObjectOutputStream Javadoc]的最後一段(https://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html)。最重要的是,你的代碼缺少所有必要的'close'語句。 –

+1

應該有更多的輸出。 'ObjectOutputStream'應該以0xAC開始,其餘的流標題開始,並以65的字節結束。您忘記關閉輸出流。 – EJP

+0

@EJP謝謝,我糾正了它。 –

回答

3

對象流用於寫入對象。這意味着它具有格式化信息來說明你寫的內容以及你寫的數據。對象流在開始時也有一個標題,它檢查數據是一個對象流。

數據流只寫入您要求的數據。沒有額外的信息。

順便說一句如果您想查看寫入流的內容,則可以寫入ByteArrayOutputStream,並在完成後調用toByteArray()。無需將其寫入文件中,您必須回讀。

相關問題