【问题标题】:Read serialized array of arrays读取序列化的数组数组
【发布时间】:2013-12-13 19:23:15
【问题描述】:

我保存了一个包含 3 个数组(1 个 String 和 2 个 Double)的序列化 String 数组的文件。

我怎样才能读回它并重做 3 个数组?

我是这样写的:

String[] storeAllArrays[] = {prod, cant, pret};

    ObjectOutputStream out;
    try {
        out = new ObjectOutputStream(new FileOutputStream("test.ser"));
        out.writeObject(storeAllArrays);
        out.flush();
        out.close();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
    }

编辑:这是我尝试过的:

 try {
         ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.ser"));
    String[] arrayT = (String[]) in.readObject();
        in.close();
         JOptionPane.showMessageDialog(this, ArrayT);
    } catch (IOException ex) {
        Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
    }

【问题讨论】:

  • 1) What have you tried? 我的意思是除了问我们。 2) 为了尽快获得更好的帮助,请发帖SSCCE
  • 几乎相同,但使用ObjectInputStream 而不是ObjectOutputStream
  • 应该是JOptionPane.showMessageDialog(this, arrayT);
  • 这段代码的问题是?

标签: java arrays serialization


【解决方案1】:

序列化和反序列化的简单示例

    String[] prod = { "pr", "od" };
    String[] cant = { "10.0", "20.0" };
    String[] pret = { "30.0", "40.0" };
    String[] storeAllArrays[] = {prod, cant, pret};

    Logger logger = Logger.getLogger(SerializerSample.class.getName());
    String serializedPath = "/tmp/store_test.ser";

    ObjectOutputStream out;
    try {
        out = new ObjectOutputStream(new FileOutputStream(serializedPath));
        out.writeObject(storeAllArrays);
        out.flush();
        out.close();
    } catch (FileNotFoundException ex) {
        logger.log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        logger.log(Level.SEVERE, null, ex);
    }

    try {
        InputStream file = new FileInputStream(serializedPath);
        InputStream buffer = new BufferedInputStream(file);
        ObjectInput input = new ObjectInputStream(buffer);

        String[] storeAllArraysREAD[] = (String[][]) input.readObject();
        logger.log(Level.INFO, storeAllArraysREAD.toString());

    } catch (ClassNotFoundException ex) {
        logger.log(Level.SEVERE, "Cannot perform input. Class not found.",
                ex);
    } catch (IOException ex) {
        logger.log(Level.SEVERE, "Cannot perform input.", ex);
    }

【讨论】:

    【解决方案2】:

    我会把字符串和两个双打写成一个字符串和两个双打。

    DataOutputStream dos = new DataOutputStream(new FileOutputStream("test.data"));
    dos.writeUTF(prod);
    dos.writeDouble(cant);
    dos.writeDouble(pret);
    dos.close();
    

    阅读

    DataInputStream dis = new DataInputStream(new FileInputStream("test.data"));
    prod = dis.readUTF();
    cant = dis.readDouble();
    pret = dis.readDouble();
    dis.close();
    

    如果你必须使用 ObjectOutputStream,你可以使用 ObjectInputStream

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.data"));
    String[] array = (String[]) dis.readObject();
    dis.close();
    

    【讨论】:

      【解决方案3】:

      你听说过ObjectInputStream吗?它用于读取使用ObjectOutputStream 创建的文件。你像这样构造一个:

      ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.ser"));
      

      然后你可以像这样读取你的数组:

      Object[] array = (Object[]) ois.readObject();
      

      【讨论】:

        猜你喜欢
        • 2019-08-31
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多