2010-12-03 7 views
0

누군가이 문제를 도와 줄 수 있습니까? 저는 바이너리 I/O 클래스에별로 좋지 않습니다.바이너리 I/O 클래스 (바이너리 데이터 파일의 모든 정수 합계)

Exercise 13b_1.dat라는 이진 데이터 파일이 DataOutputStream에서 writeInt (int)를 사용하여 만들어 졌다고 가정합니다. 이 파일에는 불특정 다수의 정수가 들어 있습니다. 정수 합계를 찾는 프로그램을 작성하십시오.

+0

프로그래밍은 주로 바이너리로 재생되며, 전 세계에 항상 있습니다. 그래서 뭔가를 시도하고, 당신에게 불분명 한 세부 사항에 대해 물어보십시오. – ruslik

+0

힌트 : "writeInt"라는 메서드로 작성된 것을 읽는 데 어떤 방법을 사용한다고 생각합니까? –

답변

0

다음은 간단한 해결책입니다.

FileInputStream fis = new FileInputStream("13b_1.dat"); 
DataInputStream dis = new DataInputStream(fis); 
int count = 0; 

try { 
    while (true) { 
     dis.readInt(); 
     count++; 
    } 

} catch (EOFException e) {} 

System.out.println("There are " + count + " integers."); 

효율성을 위해 한 정수는 4 바이트이므로 한 묶음을 읽고 4 바이트 씩 나눌 수 있습니다.

+0

물론 컨트롤 플로우에 대한 예외를 사용하는 것은 그리 좋은 스타일이 아닙니다. 그 파일 안에 얼마나 많은 int가 있는지 알아낼 수있는 방법이 있다면. – Dmitri

+0

@Dmitri : writeInt가 모든 인수에 대해 일정한 바이트 수를 쓰는 경우 파일 길이를 해당 숫자로 나눠 파일의 정수 수를 얻을 수 있습니다. – Thomas

+0

@ 토마스 : 나는 해결책의 길로 질문의 저자를 인도하기 위해 온화한 풍자를 사용했다. :) – Dmitri

관련 문제