2016-10-05 10 views
1

writeByte()의 목적이 두 클래스에서 동일하기 때문에. 그러나 둘 다 다른 내용을 쓰고있다. 라인 1은 주석 경우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(); 
     } 
} 

는, 출력은 다음과 같습니다 2 호선이 주석하는 경우

는, 출력은
65 

:

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

개체 스트림은 개체 쓰기 용입니다. 즉, 작성한 데이터는 물론 작성한 데이터에 대한 서식 지정 정보가 있음을 의미합니다. 오브젝트 스트림에는 데이터가 오브젝트 스트림인지를 확인하는 헤더도 있습니다.

데이터 스트림은 요청한 데이터 만 씁니다. 추가 정보는 없습니다.

BTW 스트림에 기록 된 내용을 보려면 ByteArrayOutputStream에 쓸 수 있으며 완료하면 toByteArray()으로 전화하십시오. 다시 읽어야하는 파일에이 파일을 쓸 필요가 없습니다.