0

很抱歉把它拖上来,但我环顾四周,我仍然不断收到 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?我怎样才能到达我没有尝试阅读的文件的末尾?实际上,我希望我尝试逐行读取文本文件,因为我知道如何做到这一点非常好。我只想接收一个对象,将其转换为文件并将其写入文件系统,但由于某种原因我的 catch 块:

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

打印出来:

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

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

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

        oos.writeObject(myFile);
    }

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

4

2 回答 2

2

AnObjectOutputStream用于将 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类方法非常方便,可以轻松读取和写入数据

于 2012-08-09T02:53:21.243 回答
1

如果您检查以下的javadocObjectInputStream

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

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

于 2012-08-09T02:59:08.773 回答