【问题标题】:ObjectInputStream catch block produces EOFException?ObjectInputStream catch 块产生EOFException?
【发布时间】:2012-08-09 02:39:49
【问题描述】:

很抱歉把它拖了上去,但我仔细看了一遍,我仍然不断收到 EOFException。除了:

    File receivedFileObject;
    File newFile = new File("newlyWrittenFile.mp3");


    try{
        Socket socket = new Socket(SERVER_IP, PORT);

        try{
        ObjectInputStream incommingData = new ObjectInputStream(socket.getInputStream());

我要做的只是将文件、txt 或 mp3 从服务器传递到客户端 - 我什至没有尝试在 ObjectInputStream 上调用 readObject(),但我仍然得到 EOFException?我怎样才能到达我没有尝试阅读的文件的末尾?实际上,我希望我尝试逐行读取文本文件,因为我知道如何做到这一点非常好。我只想接收一个对象,将其转换为文件并将其写入文件系统,但由于某种原因,我的 catch 块:

        } catch (IOException e){
            System.out.println("Incomming data assignment error : " + e);   
        }

打印出来:

传入数据分配错误:java.io.EOFException

我一直在尝试遵循this forum post 中列出的服务器代码。基本上从服务器我使用以下几行将文件写入客户端:

        if (myFile.exists()) {
        ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());

        oos.writeObject(myFile);
    }

如果有人能解释如何解决我觉得愚蠢的错误,我将不胜感激 - 提前致谢!

【问题讨论】:

  • 您写入 ObjectOutputStream 的代码在哪里?

标签: java objectinputstream eofexception


【解决方案1】:

ObjectOutputStream 用于将 java 对象序列化为流。您不太可能想要这样做。

如果你想“传递一个文件”,那可能意味着你想“传递文件的内容”,所以就这样吧:

FileOutputStream newFile = new FileOutputStream("newlyWrittenFile.mp3");
InputStream input = socket.getInputStream();
byte[] bytes = // pseudo code for reading all bytes from input
newFile.write(bytes); // pseudo code for writing to file
newFile.close();

您可能会发现 apache common-io 库 IOUtils 类方法非常方便,可以轻松读取和写入数据

【讨论】:

  • 感谢您的回复,但我的最终目标是通过网络流式传输 mp3,而不是等待整个文件下载。我是不是在说流是正确的技术,只是我没有太多经验,急于完成工作。
  • 可以使用流,但使用 ObjectOutputStream。 Web 上必须有 1000 个示例用于通过套接字发送字节 - 只需使用 google。您基本上想将FileInputStream“泵送”到套接字的OutputStream。 Apache 的 IOUtils 也可以做到这一点。
【解决方案2】:

如果你检查javadoc of ObjectInputStream

从流中读取序列化流标头并进行验证。

所以创建对象确实会触发读取。

【讨论】:

  • 啊,我明白了,这很有趣。那么我能做些什么来阻止它产生异常呢?可以这么说,如果不发生这种情况,我怎么能把任何东西都“放下”?
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 2012-09-10
  • 2018-05-23
  • 2014-02-11
相关资源
最近更新 更多