Amazon s3 S3文件下载工作

Amazon s3 S3文件下载工作,amazon-s3,aws-sdk,aws-sdk-java-2.0,Amazon S3,Aws Sdk,Aws Sdk Java 2.0,要使用java SDK从S3下载文件,我们需要执行以下操作-> 注意-多部分下载已关闭 S3Object s3Object = s3.getObject(getObjectRequest); S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent(); //Write to a file from this stream 当我们进行getObject调用时,SDK对该对象执行GET调用。 此调用仅返回响应的标题 当

要使用java SDK从S3下载文件,我们需要执行以下操作-> 注意-多部分下载已关闭

S3Object s3Object = s3.getObject(getObjectRequest);
S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent();
//Write to a file from this stream
当我们进行getObject调用时,SDK对该对象执行GET调用。 此调用仅返回响应的标题

当我们实际开始从s3ObjectInputStream读取时,我们得到响应主体。 但这一切都是一个休息电话

所以,我很困惑为什么调用只首先返回头。 S3如何知道何时开始发送响应体

我们只进行了一次调用,那么我们如何通知S3我们现在已经开始从s3ObjectInputStream读取了。
在我们从流中读取之前,实际文件存储在哪里

S3立即开始发送响应主体

你还没有开始从网络上读它

getObject

使用这种方法时要格外小心;返回的AmazonS3对象包含来自HTTP连接的直接数据流。在用户完成读取数据并关闭流之前,无法重用底层HTTP连接

缓冲了少量,但对象没有存储在任何地方。网络连接已暂停。 如果您要启动一个请求并在读取它之前等待足够长的时间,S3最终会检测到连接已暂停,放弃并关闭连接


实际上,在流中很容易将HTTP头和正文分开,因为它们之间的边界总是精确地
\r\n\r\n
。这个4字节的序列在报头中无效,并且在报头之后是必需的,因此SDK只是在从S3响应的这一点上停止提取报头,并构建并返回响应对象,从中可以从网络流中读取正文。

那么,在不下载mulipart的情况下,下载大文件的最佳方式是什么?当我们开始从流中读取数据时,会发生什么?到那时数据还在哪里?它是在套接字缓冲区中还是仍在S3服务器中?