java - 无法在 Java 中使用 DataOutputStream 写入整数

标签 java macos file-io

我知道这个问题已经被问过很多次了,但我已经尝试了每个人建议的代码,但我无法让它在我的系统上运行。

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();
}

此 Heap 对象的 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)

最佳答案

writeIntwriteDouble 将二进制数据写入流。您看到的是正确的值。既然您认为自己做错了什么,我猜您希望看到字符串值?如果是这样,请使用 writeUTF 而不是 writeIntwriteDouble

关于java - 无法在 Java 中使用 DataOutputStream 写入整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869594/

相关文章:

python - 写一个时如何限制文件大小?

java - 泛型:单个实例的?、对象和原始类型之间有什么区别?

java - 在最小堆中寻找最大值

java - 从外部 java 文件创建 Java 对象

eclipse - 在 Mac OS X 上安装 BlackBerry Eclipse JDE 插件

cocoa - 来自 OSX/Cocoa 的 pac 脚本

mysql - OS X El Capitan : MySQL errors always keep. 解决没有用

c - 如何在 ANSI C 89 中读取/写入单个文件

objective-c - 指定 NSOpenPanel RunModal 的初始目录?

java - jackson :仅序列化标记的字段