Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS S3未返回指定数量的记录_Java_Scala_Amazon Web Services_File_Amazon S3 - Fatal编程技术网

Java AWS S3未返回指定数量的记录

Java AWS S3未返回指定数量的记录,java,scala,amazon-web-services,file,amazon-s3,Java,Scala,Amazon Web Services,File,Amazon S3,我通过指定范围从S3 bucket读取文件。但它并没有给我指定长度的数据,总是给我更少的数据。这可能是因为S3在阅读时忽略/跳过了一些字符,我不明白为什么 val stringBuilder = new StringBuilder val s3Client = AmazonS3ClientBuilder.standard.withRegion("us-east-1").withCredentials(new ProfileCredentialsProvider).build val

我通过指定范围从S3 bucket读取文件。但它并没有给我指定长度的数据,总是给我更少的数据。这可能是因为S3在阅读时忽略/跳过了一些字符,我不明白为什么

  val stringBuilder = new StringBuilder

  val s3Client = AmazonS3ClientBuilder.standard.withRegion("us-east-1").withCredentials(new ProfileCredentialsProvider).build
  val rangeObjectRequest = new GetObjectRequest("test_bucket", "test_key")
    .withRange(0, 25738)

  val s3object = s3Client.getObject(rangeObjectRequest)

  System.out.println(s3object.getObjectMetadata.getContentType)
  System.out.println("content length: " + s3object.getObjectMetadata.getContentLength)

  val reader = new BufferedReader(new InputStreamReader(s3object.getObjectContent))
  var line = ""

  while ({line = reader.readLine; line != null}) {
    System.out.println(line + "  \nLength: " + line.length)
    stringBuilder.append(line).append("\n")
  }

**Output:
binary/octet-stream
content length: 25739
< 3/4 of line read from the file printed here.>
Length: 25341**
val stringBuilder=新建stringBuilder
val s3Client=AmazonS3ClientBuilder.standard.withRegion(“us-east-1”)。withCredentials(新的ProfileCredentialsProvider)。build
val rangeObjectRequest=新的GetObjectRequest(“测试桶”、“测试键”)
.范围(0,25738)
val s3object=s3Client.getObject(rangeObjectRequest)
System.out.println(s3object.getObjectMetadata.getContentType)
System.out.println(“内容长度:+s3object.getObjectMetadata.getContentLength”)
val reader=new BufferedReader(新的InputStreamReader(s3object.getObjectContent))
var line=“”
而({line=reader.readLine;line!=null}){
System.out.println(行+“\n长度:”+行长度)
stringBuilder.append(行).append(“\n”)
}
**输出:
二进制/八位字节流
内容长度:25739
<3/4行从此处打印的文件中读取。>
长度:25341**

如何从文件中读取指定数量的字节?如果我在没有指定范围的情况下读取文件,则整行打印时不会出现任何问题

您没有打印收到的全部数据,您只是打印到第一个换行符。
while
循环完成后,
stringBuilder
内部的长度是多少?它与第一行长度的值相同。为了测试,我在文件中只放了一行,所以我只打印第一行的长度。我发现还有一件事,长度25738被认为是字节长度(我认为它像一个字符长度)。它返回了这么多的字节。比较char和byte并没有什么意义。我知道。我只是想了解它是如何工作的,并且尝试了很多事情。忽略我之前的评论。