我有学习项目。我的老师不想告诉我如何解决接收多个文件的问题。我知道我需要使用getInputStream()函数,但不知道如何在inputStream对象中拆分这些文件。我需要拆分此inputStream,因为我需要将每个文件保存在文件夹中。
谢谢您的帮助,并向我解释了此问题。
答案 0 :(得分:1)
答案是,您可能需要像HTTP或FTP这样的传输协议。但是,如果您不想要高水平的东西,您可以做的是tar,然后gzip您的文件,这就是人们过去在unix上所做的事情。 Tar基本上仍然是一种传输协议,但可能不如HTTP或FTP
答案 1 :(得分:0)
听起来您的老师希望您创建协议。您需要协议的原因是,如果您通过同一个套接字发送多个文件,则您将不知道一个文件何时停止而另一个文件何时开始。为了简化此问题,我将以一个简单的聊天应用程序为例,但是同样适用于文件。
假设您有一个聊天应用程序,只有2个用户(一个服务器到客户端)。每个用户可以发送任何长度的消息。假设User1要向User2发送以下消息(每行是一条消息)
{
IPerson: {
__resolveType: function ( parent, context, info ) {
if ( parent.memberType ) {
return 'ClubMember';
}
...etc.
}
}
}
如果您通过套接字发送所有这些原始消息,则可能会收到
Hello User
How are you doing today?
。现在您如何知道一条消息在哪里开始而另一条消息在哪里停止呢?
简单的解决方案是在每条消息之前发送一些内容,说明即将出现的消息中的字符长度,因此您的消息可能是
Hello UserHow are you doing today?
因此最终用户知道我读了一个告诉我11Hello User24How are you doing today?
的整数,然后读了<length>
个字符以获取完整的消息。
现在,多数民众赞成在一个非常基本的例子,而不是超级好。让我们看一下我在视频游戏中看到的一种简单的数据包格式:
<length>
这是客户端和服务器之间使用的所有信息的基本格式。要读取的数据长度,一个数据包类型,然后是该数据包类型的数据。
对于您的用例,您可能需要类似的内容,即有关要发送的字节的某种元数据。 EG:文件长度,文件名。
我将从查看DataInputStream类开始,以轻松读取原始数据类型。