2011-10-01 115 views
2

我無法打開多個序列化爲單個.bin文件的對象。現在,當我嘗試打開文件時,我只能讀取一個對象。讀取第一個對象後,顯示錯誤消息(並且不再讀取其他對象)。我的代碼如下所示:Scala對象序列化

val ois = new ObjectInputStream(new BufferedInputStream(newFileInputStream(chooser.selectedFile))) 
val toRead:Int = ois.readInt() 
    for (i <- 0 to toRead) { 
     ois.readObject() match { 
     case anObject : myObject => 
      aMutableBuffer += anObject 
     case _ => 
     } 
    ois.close() 
    } 

,我得到的錯誤是很多如下:

Exception in thread "AWT-EventQueue-0" java.security.PrivilegedActionException:java.security.PrivilegedActionException: java.io.IOException: Stream closed 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:649) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Caused by: java.security.PrivilegedActionException: java.io.IOException: Stream closed 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
at java.awt.EventQueue$2.run(EventQueue.java:652) 
at java.awt.EventQueue$2.run(EventQueue.java:650) 
... 9 more 
Caused by: java.io.IOException: Stream closed 
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:241) 
at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2248) 
at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2541) 
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2551) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
atABCk.PhotoshopApp$$anonfun$ABCPhotoshopApp$$fileOpenPicture$1.apply$mcVI$sp(PhotoshopApp.scala:32) 
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:75) 
at ABC.PhotoshopApp$.ABC$PhotoshopApp$$fileOpenPicture(PhotoshopApp.scala:31) 
at ABC.PhotoshopApp$$anon$9$$anon$11$$anon$1$$anonfun$2.apply$mcV$sp(PhotoshopApp.scala:111) 
at scala.swing.Action$$anon$2.apply(Action.scala:60) 
at scala.swing.Action$$anon$1.actionPerformed(Action.scala:78) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:389) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809) 
at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:137) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:913) 
at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:568) 
at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:465) 
at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:411) 
at javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:305) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:852) 
at java.awt.Component.processMouseEvent(Component.java:6373) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
at java.awt.Component.processEvent(Component.java:6138) 
at java.awt.Container.processEvent(Container.java:2085) 
at java.awt.Component.dispatchEventImpl(Component.java:4735) 
at java.awt.Container.dispatchEventImpl(Container.java:2143) 
at java.awt.Component.dispatchEvent(Component.java:4565) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) 
at java.awt.Container.dispatchEventImpl(Container.java:2129) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4565) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679) 
at java.awt.EventQueue.access$000(EventQueue.java:85) 
at java.awt.EventQueue$1.run(EventQueue.java:638) 
at java.awt.EventQueue$1.run(EventQueue.java:636) 
... 14 more 

這隻有當我在一個對象到我的緩衝區,保持跟蹤閱讀情況對象。此外,我能夠正確保存文件(因爲我已經完成了測試以確保所有內容都已經存在)。任何人有任何想法這裏發生了什麼?

回答

2

您正在關閉您的Stream ois最後,但在循環內。然後嘗試在循環的第一行讀取它。這顯然是失敗的IOException: Stream closed

+0

哇...這是一種愚蠢的,哈。感謝您的支持! – MRN

+0

我想我們都有點愚蠢。這就是爲什麼我們讓電腦做所有重要的工作;-) –

+0

正是!但是,爲了完成重要的工作,我們必須告訴他們正確做什麼;-)。再次感謝!!! – MRN