Java,ObjectOutputStream.writeObject将随机符号打印到文件

时间:2013-06-21 14:00:02

标签: java serialization objectoutputstream

public class Customer {
     public static void main(String[] args) throws IOException {

         FileOutputStream a = new FileOutputStream("customer.txt");
         ObjectOutputStream b = new ObjectOutputStream(a);

         human Iman = new human("Iman",5000);
         human reda = new human("reda",5555);

         b.writeObject(Iman);   //prints random symbols. 
         b.writeObject(reda);     
    }
}

class human implements Serializable{
        private String name;
        private double balance;

        public human(String n,double b){
            this.name=n;
            this.balance=b;
        }
}

这些随机符号代表什么?

4 个答案:

答案 0 :(得分:3)

是的,您正试图存储对象本身,因此存储二进制格式。

要以文本格式实际存储数据,请使用以下代码BufferedWriter,如下所示:

public void writeHumanStateToFile(Human human){
          try{
            File file = new File("filename.txt");


            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(human.getName);
            bw.write(human.getBalance);
            bw.newLine();
            bw.close();
           }catch(IOException ex){
                ex.printStackTrace();
           }
       }

我假设你想要坚持Human对象的状态。

答案 1 :(得分:2)

您正在使用ObjectOutputStream。这不会产生文本 - 它会生成二进制序列化版本的数据。如果您确实需要文本表示,则需要使用不同的方法。

如果您对它是二进制数据没问题,请保持原样 - 但可能会更改文件名以减少误导。您可以使用ObjectInputStream再次读取数据。

答案 2 :(得分:2)

数据格式在Object Serialization Stream Protocol文档中描述。正如你所指出的那样,它不是人类可读的。

如果您想以可读格式序列化,则可以使用java.beans.XMLEncoder或类似Pojomatic的内容。

答案 3 :(得分:1)

您正在序列化该对象。它不是以纯文本形式可读,而是一种二进制格式,可以轻松读取对象并在以后的程序执行中重新创建它。

如果要以纯文本格式存储对象,则需要将对象的各个字段写入文件。