2011-10-01 4 views
2

У меня возникли проблемы с открытием нескольких объектов, которые были сериализованы в один файл .bin. Прямо сейчас, я могу получить только один объект для чтения, когда я пытаюсь открыть файл. После считывания первого объекта выводится сообщение об ошибке (и дальнейшие объекты не читаются). Мой код выглядит следующим образом:Scala Object Serialization

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

Вы закрываете свой поток ois в конце, но внутри цикла. Затем вы пытаетесь прочитать его на первой строке цикла. Который явно не удался с IOException: Stream closed

+0

Вау ... это было глупо, ха. Спасибо, что поймали его! – MRN

+0

Я думаю, мы все немного глупы. Вот почему мы позволяем компьютеру выполнять всю важную работу ;-) –

+0

Точно! Однако мы должны сказать им, что делать правильно, чтобы выполнить важную работу ;-). Еще раз спасибо!!! – MRN