【问题标题】:Cant understand output format using ObjectOutputStream [duplicate]无法理解使用 ObjectOutputStream 的输出格式 [重复]
【发布时间】:2017-06-02 10:10:04
【问题描述】:

我使用ObjectOutputStream编写了以下代码:

class ClassToTestOutputStream implements Serializable{

    int a;
    String b;

    public ClassToTestOutputStream(){
        a=10;
        b="Deepak";
    }

    public String toString() {

        String s = ""+a+" "+b;
        return s;
    }
}
public class UsingOutputStreams {

    ClassToTestOutputStream ref;
    private ObjectOutputStream oos;

    public UsingOutputStreams(){
    try {
         oos = new ObjectOutputStream(System.out);
    } catch (IOException e) {
        e.printStackTrace();
    }
    ref = new ClassToTestOutputStream();
}

public void writeOnScreen(){

    try {
        System.out.println("Writing on Screen");
        oos.writeObject(ref);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

    public static void main(String[] args) {

        UsingOutputStreams obj = new UsingOutputStreams();
        obj.writeOnScreen();
    } 
}

我得到了答案:

�� 在屏幕上书写

sr ClassToTestOutputStream����S��M I aL bt Ljava/lang/String;xp
迪帕克

请帮我弄清楚为什么会打印这样的输出。

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    ObjectOutputStreamObjectInputStream 可以读取的形式写入 Java 对象。产生的输出不是供人类消费的,它包含二进制形式的元数据和值。它并不意味着人类可读。如您所见,尝试打印或显示写入ObjectOutputStream 的数据将导致垃圾。

    您应该仔细阅读 ObjectOutputStream 的 Javadoc。

    【讨论】:

    • 你能建议一下元数据和二进制值是什么,以及为什么使用它们。
    • @DeepakAhire 该协议在 Java 对象序列化规范中定义,您应该查看该协议。不在这里。
    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2017-01-11
    • 2021-06-09
    相关资源
    最近更新 更多