[英]Can't write integers with DataOutputStream in Java
我知道这个问题已经被问过很多次了,但是我已经尝试了每个人的建议代码,但无法在我的系统上使用它。
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();
}
此堆对象在Attributes数组中有1000个项目。 但是,当我写入数据时,在vi中打开该文件时所看到的只是: ^@^@^Cè^@^@^Cé
。 十六进制编辑器仅显示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)
writeInt
和writeDouble
将二进制数据写入流。 您看到的是正确的值。 由于您认为自己做错了什么,所以我猜您应该看到字符串值? 如果是这样,请使用writeUTF
而不是writeInt
和writeDouble
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.