Por que as quebras de linha do Windows são maiores que as quebras de linha do Unix? [duplicado]

0

Então criei dois arquivos, cada um com 127.955 linhas e 24 caracteres aleatórios por linha. Tanto quanto o texto os dois arquivos eram completamente idênticos. No entanto, um arquivo tinha quebras de linha do Unix e o outro tinha quebras de linha do Windows. O arquivo com quebras de linha do Unix foi de 3,124 KB, enquanto o arquivo com quebras de linha do Windows foi de 3,249 KB. Não houve outras diferenças entre os arquivos, por isso tenho que assumir que, por algum motivo, as quebras de linha do Windows ocupam mais espaço. Alguma ideia do porquê?

    
por Kyle Piira 22.06.2016 / 02:07

3 respostas

4

Se você abrir os arquivos de texto no editor hexadecimal, a diferença que você veria no final de uma linha seria a seguinte:

Windows Line Endings: 0x0D 0x0A

Final de linha do Unix: 0x0A

O 0x0D é o valor hexadecimal do retorno de carro (representado textualmente simplesmente como \r ).

O 0x0A é o valor hexadecimal do novo caractere de linha (representado textualmente simplesmente como \n ).

Quando os términos de linha estão no formato EOL do Windows, as linhas terminam com dois caracteres: \r\n ; enquanto o formato Unix EOL termina com 1 caractere: \n .

Então, 127,955 * (24 + 1) == 3,198,875 bytes (3,123.9 KB) para o Unix EOL e 127,955 * (24 + 2) == 3,326,830 bytes (3,248.86 KB) para o Windows EOL.

Espero que ajude.

    
por 22.06.2016 / 02:23
2

O Windows usa um retorno de carro seguido por uma nova linha. O Unix usa apenas uma nova linha. Então, esse é um byte extra por quebra de linha.

    
por 22.06.2016 / 02:22
0

Quanto ao real "por que" bit - Historicamente, um teletypewriter usava o retorno de carro (hex 0D) para mover a cabeça de impressão para a margem esquerda, seguido por um avanço de linha (hexadecimal 0A) para avançar o papel.

Commodore, Atari e (pré-Unix) A Apple manteve o retorno do carro como seu símbolo de fim de linha; O Unix manteve o Line Feed; e CP / M / DOS manteve ambos.

Muitos protocolos da Internet (por exemplo, HTTP) ainda são definidos em termos de ambos (aka "CRLF"), mas em arquivos de texto reais, o único programa no Windows que eu encontrei que não lida corretamente com "apenas "um avanço de linha é o bloco de notas.

Tecnicamente, o termo "Newline" existe apenas para mascarar essa diferença histórica. Por exemplo, em C a "\ n" ou em Lisp a # \ Newline mapeia para qualquer notação que o sistema local preferir, comparado a "\ r" ou # \ Return quando um caractere de byte específico é desejado especificamente.

    
por 22.06.2016 / 06:53