AWS S3 Java SDK:RequestClientOptions.setReadLimit 如果我们考虑这个S3上传代码< /P> val tm: TransferManager = ??? val putRequest = new PutObjectRequest(bucketName, keyName, inputStream, metaData) putRequest.setStorageClass(storageClass) putRequest.getRequestClientOptions.setReadLimit(100000) tm.upload(putRequest)

AWS S3 Java SDK:RequestClientOptions.setReadLimit 如果我们考虑这个S3上传代码< /P> val tm: TransferManager = ??? val putRequest = new PutObjectRequest(bucketName, keyName, inputStream, metaData) putRequest.setStorageClass(storageClass) putRequest.getRequestClientOptions.setReadLimit(100000) tm.upload(putRequest),java,scala,amazon-web-services,amazon-s3,aws-sdk,Java,Scala,Amazon Web Services,Amazon S3,Aws Sdk,setReadLimit方法的用途是什么?包含以下说明: 设置用于签名和重试目的的可选标记和重置读取限制。 另见: InputStream.mark(int) 我的假设是正确的,它是提供某种“检查点”,这样如果网络在上传过程中间失败,那么API将(内部)从最后一个“标记”位置执行重试而不是从文件的开头执行? < P>传输管理器确实支持“检查点”,如您所描述的,尽管它与readLimit参数没有直接关系。S3允许您在中上载大型对象,而TransferManager会自动为您完成这项工作,以便通过网

setReadLimit
方法的用途是什么?包含以下说明:

设置用于签名和重试目的的可选标记和重置读取限制。 另见: InputStream.mark(int)


我的假设是正确的,它是提供某种“检查点”,这样如果网络在上传过程中间失败,那么API将(内部)从最后一个“标记”位置执行重试而不是从文件的开头执行?

< P>传输管理器确实支持“检查点”,如您所描述的,尽管它与readLimit参数没有直接关系。S3允许您在中上载大型对象,而TransferManager会自动为您完成这项工作,以便通过网络进行上载。如果单个部件的上载失败,则底层AmazonS3Client只需重试该单个部件的上载。如果向TransferManager传递一个
文件
,而不是
输入流
,它甚至可以并行上载文件的多个部分,以加快传输速度

当您向TransferManager(或底层AmazonS3Client)传递
InputStream
而不是
文件时,将使用readLimit参数。与文件相比,InputStream接口的限制性要大得多,如果需要重试部分上载,您可以在中轻松查找文件。为了支持在InputStream上载时重试,AmazonS3Client使用InputStream接口的和方法,
在每次上载开始时标记流,如果需要重试,则将其重置为标记

请注意,mark方法接受一个
readlimit
参数,并且只有义务“记住”InputStream中您预先要求的字节数。一些InputStreams通过分配一个
新字节[readlimit]
来实现
标记
,以缓冲内存中的底层数据,以便在调用reset时可以重放这些数据,这使得盲目使用要上载的对象的长度(可能是几GB)标记
是危险的。相反,AmazonS3Client默认调用值为128KB的
mark
——如果您的InputStream关心
readlimit
,这意味着AmazonS3Client将无法重试发送超过前128KB的失败请求


如果您正在使用这样的输入流,并且希望使用更多的内存来缓冲上载的数据,以便AmazonS3Client可以在上载过程中进一步重试故障(或者相反,如果您希望使用更小的缓冲区并可能看到更多故障),您可以通过
setReadLimit

调整使用的值TransferManager确实支持您描述的“检查点”,尽管它与readLimit参数没有直接关系。S3允许您在中上载大型对象,而TransferManager会自动为您完成这项工作,以便通过网络进行上载。如果单个部件的上载失败,则底层AmazonS3Client只需重试该单个部件的上载。如果向TransferManager传递一个
文件
,而不是
输入流
,它甚至可以并行上载文件的多个部分,以加快传输速度

当您向TransferManager(或底层AmazonS3Client)传递
InputStream
而不是
文件时,将使用readLimit参数。与文件相比,InputStream接口的限制性要大得多,如果需要重试部分上载,您可以在中轻松查找文件。为了支持在InputStream上载时重试,AmazonS3Client使用InputStream接口的和方法,
在每次上载开始时标记流,如果需要重试,则将其重置为标记

请注意,mark方法接受一个
readlimit
参数,并且只有义务“记住”InputStream中您预先要求的字节数。一些InputStreams通过分配一个
新字节[readlimit]
来实现
标记
,以缓冲内存中的底层数据,以便在调用reset时可以重放这些数据,这使得盲目使用要上载的对象的长度(可能是几GB)标记
是危险的。相反,AmazonS3Client默认调用值为128KB的
mark
——如果您的InputStream关心
readlimit
,这意味着AmazonS3Client将无法重试发送超过前128KB的失败请求

如果您正在使用这样的输入流,并且希望使用更多内存来缓冲上传的数据,以便AmazonS3Client可以在上传过程中进一步重试故障(或者相反,如果您希望使用更小的缓冲区并可能看到更多故障),则可以通过
setReadLimit
调整使用的值