node:buffer
O módulo node:buffer no Azion Runtime: a classe Buffer para dados binários, as APIs suportadas e exemplos de codificação, concatenação e corpo de requisição.
O módulo node:buffer fornece Buffer, a classe do Node.js que armazena dados binários brutos como uma sequência de bytes. Use-o para converter texto entre codificações como hex e base64, para combinar e fatiar dados binários e para ler o corpo de uma requisição ou um stream como bytes. No Azion Runtime, Buffer também é um global: o global e a classe que você importa de node:buffer são o mesmo objeto, e todo buffer é um Uint8Array.
Exemplos
Cada exemplo é uma function completa que importa Buffer de node:buffer. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna.
Operações básicas com buffer
Esta function cria um buffer a partir de uma string, exibe o buffer em duas codificações e sobrescreve parte dele:
A function responde com o texto sobrescrito:
Conversões de codificação de buffer
Esta function converte uma string para três codificações de transmissão de dados e depois decodifica a forma base64 de volta para texto:
A function responde com cada codificação da string:
No Azion Runtime, a saída base64url mantém o preenchimento =, como mostra o valor base64url, e Buffer.isEncoding("base64url") retorna false.
Concatenação e fatiamento de buffer
Esta function combina três buffers em um só e depois extrai e copia uma parte do resultado:
A function responde com o buffer combinado e as duas partes extraídas:
Processamento de dados binários
Esta function lê o corpo da requisição como um buffer, procura nele uma sequência de bytes e, em seguida, compara e aloca buffers:
Para uma requisição POST cujo corpo é Hello Azion Runtime, a function responde com o tamanho do corpo, o primeiro byte dele e a posição de Azion:
Serialização JSON com buffers
Esta function converte um objeto em um buffer JSON, usa o tamanho do buffer na resposta e define Content-Length a partir dele:
A function responde com o objeto e o tamanho do buffer, com Content-Length definido como 78:
APIs suportadas
A tabela lista o status de cada API de node:buffer no Azion Runtime:
| API | Status |
|---|---|
Buffer.alloc() | 🟢 Com suporte |
Buffer.allocUnsafe() | 🟢 Com suporte |
Buffer.byteLength() | 🟢 Com suporte |
Buffer.compare() | 🟢 Com suporte |
Buffer.concat() | 🟢 Com suporte |
Buffer.from() | 🟢 Com suporte |
Buffer.isBuffer() | 🟢 Com suporte |
Buffer.isEncoding() | 🟢 Com suporte |
buf.compare() | 🟢 Com suporte |
buf.copy() | 🟢 Com suporte |
buf.equals() | 🟢 Com suporte |
buf.fill() | 🟢 Com suporte |
buf.indexOf() | 🟢 Com suporte |
buf.includes() | 🟢 Com suporte |
buf.lastIndexOf() | 🟢 Com suporte |
buf.length | 🟢 Com suporte |
buf.readInt*() | 🟡 Suporte parcial |
buf.subarray() | 🟢 Com suporte |
buf.slice() | 🟡 Com suporte (obsoleta, use subarray()) |
buf.toString() | 🟢 Com suporte |
buf.write() | 🟢 Com suporte |
buf.writeInt*() | 🟡 Suporte parcial |
buffer.isAscii() | 🔴 Sem suporte |
buffer.isUtf8() | 🔴 Sem suporte |
buffer.resolveObjectURL() | 🔴 Sem suporte |
buffer.transcode() | 🔴 Sem suporte |
As APIs marcadas como 🟡 Suporte parcial têm funcionalidade limitada em comparação com a implementação completa do Node.js. Entre elas, writeUInt32BE(), readUInt32BE(), writeInt16LE() e readInt16LE() retornam os valores gravados, e readBigUInt64BE() está disponível. As funções de nível de módulo buffer.isAscii(), buffer.isUtf8(), buffer.resolveObjectURL() e buffer.transcode() não têm suporte. O Node.js marca buf.slice() como obsoleta a partir da v17.5.0; use buf.subarray() em vez dela.