O formato ar (arquivador) é um formato de arquivo usado para criar e manipular arquivos de arquivamento que armazenam vários arquivos em um único arquivo. Ele se originou em sistemas Unix e é comumente usado em sistemas operacionais baseados em BSD. O formato ar é uma maneira simples e eficiente de empacotar vários arquivos juntos para armazenamento ou distribuição.
Um arquivo de arquivamento ar consiste em um cabeçalho global seguido por uma série de membros de arquivamento. Cada membro de arquivamento representa um arquivo que foi armazenado no arquivamento. O cabeçalho global é um cabeçalho de texto simples que identifica o arquivo como um arquivamento ar e fornece informações básicas sobre a versão do formato de arquivamento.
O cabeçalho global de um arquivamento ar começa com a string de assinatura "!<arch>\n". Esta assinatura é seguida por um caractere de nova linha e serve para identificar o arquivo como um arquivamento ar. A assinatura é então seguida por uma série de membros de arquivo, cada um representando um arquivo armazenado no arquivamento.
Cada membro de arquivo em um arquivamento ar consiste em um cabeçalho de arquivo e nos próprios dados do arquivo. O cabeçalho do arquivo contém metadados sobre o arquivo, como seu nome, carimbo de data/hora de modificação, IDs de proprietário e grupo, modo de arquivo e tamanho. O cabeçalho do arquivo tem um tamanho fixo de 60 bytes e é estruturado da seguinte forma:
- Nome do arquivo (16 bytes): Uma string terminada em nulo representando o nome do arquivo. Se o nome do arquivo tiver mais de 15 caracteres, ele será truncado e o símbolo especial "/" será usado para indicar que o nome completo do arquivo está armazenado em um membro de arquivo separado.
- Carimbo de data/hora de modificação do arquivo (12 bytes): Um inteiro decimal representando o carimbo de data/hora de modificação do arquivo em segundos desde 1º de janeiro de 1970 (época Unix).
- ID do proprietário (6 bytes): Um inteiro decimal representando o ID do usuário do proprietário do arquivo.
- ID do grupo (6 bytes): Um inteiro decimal representando o ID do grupo do grupo do arquivo.
- Modo de arquivo (8 bytes): Um inteiro octal representando o modo e as permissões do arquivo.
- Tamanho do arquivo (10 bytes): Um inteiro decimal representando o tamanho do arquivo em bytes.
- Caracteres finais (2 bytes): Dois caracteres especiais, "`\n`" (crase seguida por nova linha), indicando o fim do cabeçalho do arquivo.
Após o cabeçalho do arquivo, os próprios dados do arquivo são armazenados. O tamanho dos dados do arquivo é determinado pelo tamanho do arquivo especificado no cabeçalho. Se o tamanho do arquivo for ímpar, um byte de preenchimento extra é adicionado para garantir o alinhamento adequado para o próximo membro do arquivo.
Um membro de arquivo especial em um arquivamento ar é a tabela de símbolos, que tem o nome "/ ". A tabela de símbolos é usada para armazenar nomes de arquivos longos que excedem o limite de 15 caracteres no cabeçalho do arquivo. Quando um nome de arquivo é muito longo, ele é truncado no cabeçalho do arquivo e o nome completo é armazenado na tabela de símbolos. A tabela de símbolos é um membro de arquivo especial que contém uma lista de strings terminadas em nulo representando os nomes de arquivos longos.
Outro membro de arquivo especial é o membro de nome de arquivo longo, que tem o nome "/[0-9]+". Este membro de arquivo é usado em conjunto com a tabela de símbolos. Quando um nome de arquivo é muito longo para caber no cabeçalho do arquivo, uma entrada especial é criada na tabela de símbolos com o formato "/[offset]/[length]", onde "offset" é o deslocamento de byte no membro de nome de arquivo longo onde o nome completo do arquivo é armazenado e "length" é o comprimento do nome completo do arquivo.
O formato ar também suporta várias opções e sinalizadores que podem ser usados ao criar ou manipular arquivos de arquivamento. Algumas opções comuns incluem: - "r": Insere arquivos em um arquivamento existente, substituindo quaisquer arquivos existentes com o mesmo nome. - "c": Cria um novo arquivo de arquivamento, sobrescrevendo qualquer arquivo existente com o mesmo nome. - "u": Atualiza arquivos em um arquivamento existente, adicionando novos arquivos ou substituindo versões mais antigas de arquivos. - "d": Exclui arquivos de um arquivamento existente. - "t": Lista o conteúdo de um arquivamento.
Uma limitação do formato ar é que ele não suporta compactação. Os arquivos armazenados em um arquivamento ar não são compactados e são armazenados em seu formato original. No entanto, os arquivamentos ar podem ser usados em combinação com utilitários de compactação como gzip ou bzip2 para criar arquivamentos compactados.
Apesar de sua simplicidade, o formato ar tem sido amplamente utilizado por décadas e continua sendo um formato padrão para criar e distribuir arquivos de biblioteca em sistemas Unix e BSD. Muitos utilitários Unix comuns, como o próprio comando "ar", o comando "ranlib" para gerar tabelas de símbolos e o comando "nm" para listar símbolos em arquivos de objeto, funcionam com arquivamentos ar.
Em resumo, o formato ar (arquivador) é um formato de arquivo simples e eficiente usado para criar e manipular arquivos de arquivamento em sistemas Unix e BSD. Ele consiste em um cabeçalho global identificando o arquivamento, seguido por uma série de membros de arquivo representando os arquivos armazenados no arquivamento. O formato ar suporta nomes de arquivos longos por meio do uso de uma tabela de símbolos e membros de arquivo especiais. Embora não forneça compactação interna, os arquivamentos ar podem ser combinados com utilitários de compactação para criar arquivamentos compactados. O formato ar tem sido amplamente utilizado por décadas e continua sendo um formato padrão para empacotar e distribuir arquivos em sistemas Unix e BSD.
A compactação de arquivos reduz redundâncias para que as mesmas informações ocupem menos bits. O limite superior é definido pela teoria da informação: em compactação sem perdas, a fronteira é a entropia da fonte (veja o teorema de codificação de fonte de Shannon teorema de codificação de fonte e seu artigo original de 1948 “A Mathematical Theory of Communication”). Para compactação com perdas, o trade-off entre taxa e qualidade é capturado pela teoria taxa-distorção.
A maioria dos compressores tem duas etapas. Primeiro, um modelo prevê ou expõe estrutura nos dados. Depois, um codificador transforma essas previsões em padrões de bits quase ótimos. Uma família clássica é Lempel–Ziv LZ77 (1977) e LZ78 (1978) detectam substrings repetidas e emitem referências em vez de bytes brutos. Do lado da codificação Huffman (veja o artigo de 1952) dá códigos menores a símbolos mais prováveis. Codificação aritmética e codificação por intervalos chegam ainda mais perto do limite de entropia, enquanto Asymmetric Numeral Systems (ANS) modernos atingem taxas similares com implementações rápidas baseadas em tabelas.
DEFLATE (usado por gzip, zlib e ZIP) combina LZ77 com Huffman. As especificações são públicas: DEFLATE RFC 1951, wrapper zlib RFC 1950e formato gzip RFC 1952. O gzip é moldado para streaming e não tenta fornecer acesso aleatório. PNG padroniza DEFLATE como único método de compressão (janela máxima de 32 KiB) segundo “Compression method 0… deflate/inflate… at most 32768 bytes” e o W3C/ISO PNG 2nd Edition.
Zstandard (zstd): um compressor moderno de uso geral pensado para altas taxas e decompactação muito rápida. O formato está em RFC 8878 (e no espelho HTML) além da especificação de referência no GitHub. Assim como gzip, o frame básico não mira acesso aleatório. Um superpoder do zstd são dicionários: pequenas amostras do seu corpus que reduzem drasticamente muitos arquivos pequenos ou parecidos (consulte a documentação de dicionários do python-zstandard e o exemplo de Nigel Tao). Implementações aceitam dicionários “unstructured” e “structured” (discussão).
Brotli: otimizado para conteúdo web (ex.: fontes WOFF2, HTTP). Mistura um dicionário estático com um núcleo LZ+entropia parecido com DEFLATE. Sua especificação é RFC 7932, que também descreve uma janela 2WBITS−16 com WBITS em [10, 24] (1 KiB−16 B até 16 MiB−16 B) e diz que não fornece acesso aleatório. Brotli costuma superar gzip em texto web e ainda decodifica rápido.
Contêiner ZIP: ZIP é um arquivo que pode armazenar entradas com diversos métodos (deflate, store, zstd etc.). O padrão de fato é o APPNOTE da PKWARE (veja o portal APPNOTE, uma cópia hospedadae os resumos da LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 mira velocidade bruta com razões modestas. Consulte a página do projeto (“extremely fast compression”) e o formato de frame. Ideal para caches em memória, telemetria ou pipelines quentes que exigem decompactação quase na velocidade da RAM.
XZ / LZMA busca densidade (ótimas taxas) com compressão relativamente lenta. XZ é um contêiner; quem faz o serviço pesado é normalmente LZMA/LZMA2 (modelagem tipo LZ77 + range coding). Veja o formato .xz, a especificação LZMA (Pavlov)e notas do kernel Linux sobre XZ Embedded. XZ costuma comprimir melhor que gzip e rivaliza com codecs modernos de alta taxa, porém com tempos de codificação mais longos.
bzip2 usa Transformada de Burrows–Wheeler (BWT), move-to-front, RLE e Huffman. Geralmente gera arquivos menores que gzip, porém mais devagar; veja o manual oficial e as páginas man (Linux).
O “tamanho da janela” importa. Referências DEFLATE olham no máximo 32 KiB para trás (RFC 1951) e o limite de 32 KiB do PNG documentado aqui. Brotli cobre janelas de ~1 KiB a 16 MiB (RFC 7932). Zstd ajusta janela e profundidade de busca pelos níveis (RFC 8878). Streams básicos de gzip/zstd/brotli foram feitos para decodificação sequencial; os formatos não prometem acesso aleatório, embora contêineres (tar com índice, framing em blocos ou índices específicos) possam adicioná-lo.
Os formatos acima são sem perdas: recuperam exatamente os mesmos bytes. Codecs de mídia costumam ser com perdas: descartam detalhes imperceptíveis para atingir taxas mais baixas. Em imagens, o JPEG clássico (DCT, quantização, codificação entropia) é padronizado em ITU-T T.81 / ISO/IEC 10918-1. Em áudio, MP3 (MPEG-1 Layer III) e AAC (MPEG-2/4) usam modelos perceptuais e transformadas MDCT (veja ISO/IEC 11172-3, ISO/IEC 13818-7e a visão geral de MDCT aqui). As abordagens com e sem perdas podem coexistir (ex.: PNG para ativos de UI; codecs web para imagem/vídeo/áudio).
Teoria Shannon 1948 · Rate–distortion · Codificação Huffman 1952 · Codificação aritmética · Range coding · ANS. Formatos DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · Formato XZ. Pilha BWT Burrows–Wheeler (1994) · manual do bzip2. Mídia JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Em resumo: escolha um compressor que combine com seus dados e restrições, meça em entradas reais e não esqueça os ganhos de dicionários e framing inteligente. Com o par certo você obtém arquivos menores, transferências mais rápidas e apps mais responsivos sem sacrificar correção ou portabilidade.
A compressão de arquivos é um processo que reduz o tamanho de um arquivo ou arquivos, normalmente para economizar espaço de armazenamento ou acelerar a transmissão em uma rede.
A compressão de arquivos funciona identificando e removendo redundâncias nos dados. Ela usa algoritmos para codificar os dados originais em um espaço menor.
Os dois principais tipos de compressão de arquivos são a compressão sem perdas e a compressão com perdas. A compressão sem perdas permite que o arquivo original seja perfeitamente restaurado, enquanto a compressão com perdas permite uma redução de tamanho mais significativa com alguma perda de qualidade dos dados.
Um exemplo popular de uma ferramenta de compressão de arquivos é o WinZip, que suporta vários formatos de compressão, incluindo ZIP e RAR.
Com compressão sem perdas, a qualidade permanece inalterada. No entanto, com compressão com perdas, pode haver uma diminuição perceptível na qualidade, pois elimina dados menos importantes para reduzir significativamente o tamanho do arquivo.
Sim, a compressão de arquivos é segura em termos de integridade dos dados, especialmente com compressão sem perdas. No entanto, como qualquer arquivo, os arquivos comprimidos podem ser alvo de malware ou vírus, por isso, é sempre importante ter um software de segurança de boa reputação.
Quase todos os tipos de arquivos podem ser comprimidos, incluindo arquivos de texto, imagens, áudio, vídeo e arquivos de software. No entanto, o nível de compressão alcançável pode variar significativamente entre os tipos de arquivo.
Um arquivo ZIP é um tipo de formato de arquivo que usa compressão sem perdas para reduzir o tamanho de um ou mais arquivos. Vários arquivos em um arquivo ZIP são efetivamente agrupados em um único arquivo, o que também facilita o compartilhamento.
Tecnicamente, sim, embora a redução de tamanho adicional possa ser mínima ou até contraproducente. Comprimir um arquivo já comprimido pode às vezes aumentar seu tamanho devido aos metadados adicionados pelo algoritmo de compressão.
Para descomprimir um arquivo, geralmente você precisa de uma ferramenta de descompressão ou descompactação, como WinZip ou 7-Zip. Essas ferramentas podem extrair os arquivos originais do formato comprimido.