java - 通过 ObjectOutputStream 发送文件然后将其保存在 Java 中?

标签 java file object inputstream outputstream

我有这个简单的服务器/客户端应用程序。我试图让服务器通过 OutputStream(FileOutputStream、OutputStream、ObjectOutputStream 等)发送文件,并在将其保存到实际文件之前在客户端接收它。问题是,我试过这样做,但一直失败。每当我创建文件并将从服务器接收到的对象写入其中时,我都会得到一张损坏的图像(我只是将其保存为 jpg,但这无关紧要)。以下是最有可能出现故障的代码部分(您在此处看到的所有看似未声明的对象都已事先声明):

服务器:

                ObjectOutputStream outToClient = new ObjectOutputStream(
                        connSocket.getOutputStream());
                File imgFile = new File(dir + children[0]);
                outToClient.writeObject(imgFile);
                outToClient.flush();

客户:

ObjectInputStream inFromServer = new ObjectInputStream(
                clientSocket.getInputStream());
        ObjectOutputStream saveImage = new ObjectOutputStream(
                new FileOutputStream("D:/ServerMapCopy/gday.jpg"));
        saveImage.writeObject(inFromServer.readObject());

所以,我的问题是我无法在没有损坏文件的情况下正确地通过流获取对象。

最佳答案

File 对象表示该文件的路径,而不是其实际内容。您应该做的是从该文件中读取 byte 并将它们发送到您的 ObjectOutputStream

File f = ...
ObjectOutputStream oos = ...

byte[] content = Files.readAllBytes(f.toPath);
oos.writeObject(content);


File f=...
ObjectInputStream ois = ...

byte[] content = (byte[]) ois.readObject();
Files.write(f.toPath(), content);

关于java - 通过 ObjectOutputStream 发送文件然后将其保存在 Java 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593725/

相关文章:

javascript - 按值对数组的复杂数组进行排序

java - 在 struts.xml 中使用外部属性

如果串行端口保持打开状态,Java 应用程序将不会退出

java - Tomcat 安装目录无效。它缺少预期的文件或文件夹 lib/jasper-el.jar

php - ftp 文件关闭操作出错

object - 在 Delphi 上,如何引用仅使用一个变量创建的对象?

object - QTP 中的 .Exist 超时如何工作?

java - Hibernate 中的动态查询

python读取文件

java - 读取/写入文件 Java 时关闭 Stream