在 Java 中序列化和保存 double [] 的 ArrayList

Posted

技术标签:

【中文标题】在 Java 中序列化和保存 double [] 的 ArrayList【英文标题】:Serialize and Saving an ArrayList of double [] in Java 【发布时间】:2014-11-30 02:38:22 【问题描述】:

我想在 java 中序列化并保存一个包含双 [] 数组列表的数组列表。这是我的代码。

FileOutputStream fileOutputStream = null; 
ObjectOutputStream objectOutputStream = null; 
FileInputStream fileInputStream = null; 
ObjectInputStream objectInputStream = null; 

public void writeArrayListToFile(ArrayList<ArrayList<double []>> arraylist, String outputFilePath)

    System.out.println("Start saving the file at  : " + outputFilePath);

    try 
        fileOutputStream = new FileOutputStream(outputFilePath , true);
        objectOutputStream = new ObjectOutputStream(objectOutputStream);
        objectOutputStream.writeObject(arraylist);
        System.out.println("Arraylist Saved Successfully...");
     catch (FileNotFoundException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
           

但是我得到一个错误,下面是堆栈跟踪。

线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 java.io.ObjectOutputStream$BlockDataOutputStream.drain(未知来源) 在 java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(未知来源) 在 java.io.ObjectOutputStream.(未知来源) 在 com.fyp.imur2.SaveArrayListToFile.writeArrayListToFile(SaveArrayListToFile.java:24) 在 com.fyp.imur2.JPanelJFreeChart.btnSaveGestureCollectionActionPerformed(JPanelJFreeChart.java:380) 在 com.fyp.imur2.JPanelJFreeChart.access$5(JPanelJFreeChart.java:375) 在 com.fyp.imur2.JPanelJFreeChart$6.actionPerformed(JPanelJFreeChart.java:166) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$200(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

有人可以帮我解决这个问题吗?任何帮助,将不胜感激。提前致谢。

【问题讨论】:

【参考方案1】:

在构造ObjectOutputStream的实例时需要传递fileOutputStream

objectOutputStream = new ObjectOutputStream(fileOutputStream);

【讨论】:

【参考方案2】:

上线

objectOutputStream = new ObjectOutputStream(objectOutputStream);

您尝试使用 objectOutputStream 对象调用构造函数,该对象为空。看起来你打算用 fileOutputStream 来调用它,像这样:

objectOutputStream = new ObjectOutputStream(fileOutputStream);

【讨论】:

以上是关于在 Java 中序列化和保存 double [] 的 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

OpenCVSharp_保存浮点型Mat数据

数字列表的最有效(反)序列化

Java Double类型保存两位小数

java序列化和反序列化

Java Spark 如何将 JavaPairRDD<HashSet<String>, HashMap<String, Double>> 保存到文件中?

Java序列化的作用和反序列化