2014-02-19 3 views
0

여러 번 물어 봤지만 모든 사람들이 제안한 코드를 시도해 보았고 시스템에서 작동하지 않게되었습니다.Java에서 DataOutputStream을 사용하여 정수를 쓸 수 없다

public class Heap implements Serializable { 
    public Attribute[] A; // Array of data, has elements name/String, p1/int, n1/int, ig/double 
    private int n = 0; // num elements 
    private int max = 0; // Max elements 
    ... 
} 


public void serialize(Heap hp, String filename) throws IOException { 
    DataOutputStream dst = new DataOutputStream(new FileOutputStream(filename)); 

    dst.writeInt(hp.heapMax()); 
    dst.writeInt(hp.A.length); 

    System.out.println("Writing heap max " + hp.heapMax() + " and heap size " + hp.A.length); 

    for(int i = hp.A.length - 1; i > 0; i--) { 
     dst.writeInt(hp.A[i].n1); 
     dst.writeInt(hp.A[i].p1); 
     dst.writeDouble(hp.A[i].ig); 
     dst.writeUTF(hp.A[i].name); 
    } 

    dst.close(); 
} 

이 힙 개체의 특성 배열에는 1000 개의 항목이 있습니다. 그러나 데이터를 쓸 때 vi에서 파일을 열 때 파일에있는 내용은 모두 ^@^@^Cè^@^@^Cé입니다. 16 진수 편집기는 00 00 03 E8 00 00 03 E9 만 표시합니다. 그래서 내가 뭘 잘못하고 있니? java -version

출력 :

java version "1.7.0_25" 
Java(TM) SE Runtime Environment (build 1.7.0_25-b15) 
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) 
+0

'writeInt' 메서드로 문제가 발생합니까? –

답변

3

writeIntwriteDouble 스트림에 이진 데이터를 작성합니다. 올바른 값을보고 있습니다. 당신이 뭔가 잘못하고 있다고 생각하기 때문에 문자열 값을 볼 것으로 예상되는 것 같아요? 그렇다면 writeIntwriteDouble 대신 writeUTF을 사용하십시오.

관련 문제