В настоящее время я получаю входной поток, используя хранилище S3 Амазонки, как показано ниже:Выяснить размер из InputStream
public static InputStream getResourceAsStream(String fileKey) {
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
return s3Client.getObject(new GetObjectRequest(bucketName, fileKey)).getObjectContent();
}
Файлы Я имею дело с являются .mp4 видео. Я пытаюсь передать видео с помощью Range-Requests, чтобы обеспечить быструю пересылку и перемотку для конечного пользователя. Моя потоковая обработка работала нормально, когда я использовал обычные объекты File
, но теперь я получаю поток от Amazon S3 вместо использования файла, сохраненного на локальной машине.
Как я могу определить длину этого потока? Перед тем как я сделал это:
Long length = Files.size(filepath);
Но теперь это не работает, как я не файл, сохраненный непосредственно на машине, выполняющей код Java. Есть ли способ выяснить длину InputStream
?
No. 'InputStream' представляет собой поток байтов, единственный способ узнать размер должен прочитать, пока не больше байтов не возвращаются. – Kayaman
@Kayaman Итак, я должен прочитать 'InputStream' и хранить байты в байтовом массиве до тех пор, пока не будет возвращено больше байтов, а затем проверьте размер массива байтов? –
Обычно нет. Это было бы невероятным объемом памяти, поэтому обычно вам нужно проектировать вокруг нее. – Kayaman