As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Operações de streaming
No AWS SDK para Kotlin, os dados binários (fluxos) são representados como um ByteStream
tipo, que é um fluxo abstrato de bytes somente para leitura.
Respostas de streaming
As respostas com um stream binário (como a operação de API do Amazon Simple Storage Service (Amazon GetObjectS3)) são tratadas de forma diferente de outros métodos. Esses métodos usam uma função lambda que manipula a resposta em vez de retorná-la diretamente. Isso limita o escopo da resposta à função e simplifica o gerenciamento da vida útil do chamador e do tempo de execução do SDK.
Depois que a função lambda retorna, todos os recursos, como a conexão HTTP subjacente, são liberados. (Eles não ByteStream
devem ser acessados após o retorno do lambda e não devem ser retirados do fechamento.) O resultado da chamada é o que o lambda retorna.
O exemplo de código a seguir mostra a função getObject recebendo um parâmetro lambda, que manipula a resposta.
val s3Client = S3Client.fromEnvironment() val req = GetObjectRequest { ... } val path = Paths.get("/tmp/download.txt") // S3Client.getObject has the following signature: // suspend fun <T> getObject(input: GetObjectRequest, block: suspend (GetObjectResponse) -> T): T val contentSize = s3Client.getObject(req) { resp -> // resp is valid until the end of the block. // Do not attempt to store or process the stream after the block returns. // resp.body is of type ByteStream. val rc = resp.body?.writeToFile(path) rc } println("wrote $contentSize bytes to $path")
O ByteStream
tipo tem as seguintes extensões para formas comuns de consumi-lo:
-
ByteStream.writeToFile(file: File): Long
-
ByteStream.writeToFile(path: Path): Long
-
ByteStream.toByteArray(): ByteArray
-
ByteStream.decodeToString(): String
Tudo isso está definido no aws.smithy.kotlin.runtime.content
pacote.
Solicitações de streaming
Para fornecer umByteStream
, também existem vários métodos de conveniência, incluindo os seguintes:
ByteStream.fromFile(file: File)
File.asByteStream(): ByteStream
Path.asByteStream(): ByteStream
ByteStream.fromBytes(bytes: ByteArray)
ByteStream.fromString(str: String)
Tudo isso está definido no aws.smithy.kotlin.runtime.content
pacote.
O exemplo de código a seguir mostra o uso de métodos de ByteStream
conveniência que fornecem a propriedade body na criação de um PutObjectRequest:
val req = PutObjectRequest { ... body = ByteStream.fromFile(file) // body = ByteStream.fromBytes(byteArray) // body = ByteStream.fromString("string") // etc }