当前位置: 首页 > 面试题库 >

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

苏嘉志
2023-03-14
问题内容

我有这个简单的服务器/客户端应用程序。我正在尝试让服务器通过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);


 类似资料:
  • 问题内容: 我想通过AJAX将字段数据从表单发送到文件,并且在网上找到了此解决方案:http : //techglimpse.com/pass-localstorage- data-php-ajax-jquery/ 唯一的问题是,我有多个字段而不是单个字段,并且我想将输出(localStorage)保存为HTML(或任何其他格式)文件,而不是将其显示在#output div中。 我怎样才能做到这一

  • 问题内容: 我需要从供应商的Web服务中检索文件,并将它们推送到唯一的blob容器中,以便用户拥有唯一的“工作区”。本质上,我将从供应商处获取文件,并且用户可以通过自己的Blob容器中的文件进行编辑,以免彼此交叉工作文件。我有唯一的blob容器,但需要从供应商的API中“下载” /获取文件,并将其推送到blob容器中。我能够成功检索文件,这将是分别获取PDF,文本文件和图像的调用……但是,如果尝试

  • 问题内容: 我一直在这墙上撞了一段时间。我知道您可以用C#代码创建一个存储过程,就可以了。但是我不知道的是,然后我可以将该存储过程 保存 到SQL Server上 ,但是可以通过C#代码完成吗? 场景是:我想通过代码创建一个测试数据库,然后想向新创建的测试数据库(服务器端)添加存储过程-同样,所有操作都通过相同的C#代码项目完成。 问题答案: 是的,这是可能的。在这里,我给你一个例子。 没有实体框

  • 我试图从Firefox中的新MediaRecorderAPI发送一个Blob到NodeJS以将其存储在文件中。Blob包含转换为webm-file的记录。我在发送之前将这个Blob分成一定的大小,以便能够通过webrtc数据通道提供的带宽发送它。这个看起来像这样: 在nodeJS方面,我试图将数据转换回webm文件,就像这样: 它告诉我,块被写入,但是文件是空的。我尝试了从blob派生的bas64

  • 问题内容: 您好,我尝试使用Java中的客户端-服务器类发送文件。由于某种原因,当调用发送文件的方法时,套接字关闭。这是代码: 和来自客户端的代码: 和我得到的错误消息:严重:null java.net.SocketException:套接字已关闭 我对此并没有真正的经验,所以如果有帮助的话会很棒。 问题答案: 该方法返回一个,代表它实际读取的字节数。不能保证从字节数组中读取所需的字节数。它通常会

  • 问题内容: 我使用这里的代码通过套接字发送单个文件。但是,我需要能够通过套接字发送多个文件(基本上是目录中的所有文件),并使客户端识别文件之间的分隔方式。坦白说,我完全不知所措。任何提示都会有所帮助。 注意1: 我需要一种以连续流方式发送文件的方法,客户端可以将其分离成单独的文件。它不能依赖客户端的个别请求。 注意2: 我很肯定会回答一个问题,不,这 不是 家庭作业。 编辑 建议我可以在文件本身之