ObjectInputStream catch块产生EOFException?

时间:2012-08-09 02:39:50

标签: java objectinputstream eofexception

很抱歉把它拖了起来,但我已经好好看看了,我仍然不断得到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从服务器传递到客户端 - 我甚至都没有尝试在readObject()上调用ObjectInputStream但我仍然得到EOFException类?如何到达我未尝试阅读的文件的末尾?事实上,我希望我试图逐行阅读文本文件,因为我知道如何做到这一点非常好。我只想接收一个Object,将其转换为文件并将其写入文件系统但由于某种原因我的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);
    }

如果有人可以解释如何解决我觉得愚蠢的错误,我将非常感激 - 提前致谢!

2 个答案:

答案 0 :(得分:2)

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类方法非常方便您轻松读取和写入数据

答案 1 :(得分:0)

如果您查看javadoc of ObjectInputStream

  

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

因此,创建对象会触发读取。