您好我是JAVA中从服务器向客户端传输对象的新手。任何人都可以知道我可以通过 SSL网络从客户端传输到服务器的最大对象大小。
截至目前,我正在通过SSL网络将对象从客户端传输到服务器,其中包含两种字符串类型,一种长类型,三种日期类型和一种映射类型的值。
有了这个,我需要在将对象从客户端传输到服务器之前在我的对象中添加一个byte []类型。
对于byte []的值,我将读取我的进程的输出文件并设置为其值。在我的过程中,我不知道该文件中有多少字节。
那么任何人都可以告诉我,如果我在byte []中设置文件内容并通过网络传输会发生任何数据丢失吗?收到服务器端后,我能获得全部价值吗?
给我一个很好的建议。提前谢谢。
答案 0 :(得分:1)
任何人都可以知道我可以通过SSL网络从客户端传输到服务器的对象的最大大小。
在将对象从客户端传输到服务器之前,我需要在对象中添加一个byte []类型。
对于byte []的值,我将读取我的进程的输出文件并设置为其值。在我的过程中,我不知道该文件中有多少字节。
您需要重新考虑协议的这一部分。 byte[]
限制为2 ^ 31-1个元素,文件可能远大于此。您将无法分配大型数组,将大型文件读入内存,并在另一端重新构建它们。您应该重新设计协议,以便以可管理的大小(例如每次8k或32k)发送文件,使用长度字前缀并指示哪个是最后一个块。
那么任何人都可以告诉我,如果我在byte []中设置文件内容并通过网络传输会发生任何数据丢失吗?
TCP不会丢失数据。您在发送时会遇到我上面提到的问题,并且在接收时会遇到类似的问题。不要这样做。
收到服务器端后,我可以获得全部价值吗?
您可以尽可能多地阅读,但是您需要注意read()
并未签约以一次传输多个字节。如果你期望更多,你需要循环阅读,直到你得到你想要的一切。