Gravar um BIT em um arquivo?

Ola, estou desenvolvendo um compactador de arquivos, já consegui fazer o processo de leitura dos bits do arquivo original, fazer o processo de compactação dos bits deste arquivo, mas eu estou querendo saber como eu gravo esses bits em outro arquivo, qual a função que eu utilizo para gravar apenas UM BIT por vez em um arquivo, pensei na ideia de usar assembler para fazer isso, mas é muito trabalhoso, eu queria mesmo era uma função do java ja pronta, para adiantar o serviço…
Quem souber, por favor, HELP-ME… sua ajuda será muito bem vinda…

:grin:

TAQ - Ciências da Computação - UFG

Credo em cruz, já acho que escrever um byte de cada vez é desperdício de CPU…
Mas para escrever um bit, obviamente você precisa ter algo como um método writeBit que faz o seguinte:

  • guarda sempre um byte (com 8 bits)
  • seta o byte na posição certa com o bit que recebeu, e toma conta do número de bits que já foram preenchidos no byte
  • se o número de bytes recebidos for 8, grava o byte, zera o byte e o contador de bits.

EDIT - expressei-me mal. Não existe um método writeBit; você tem de escrever um. Pegue a inspiração no fonte da classe java.util.BitSet que faz algo parecido (mas em vez de trabalhar com 8 bits de cada vez, trabalha com 64 - um long.)

Certo, mas qual a classe que eu encontro este método para gravar UM UNICO BIT no arquivo??? Pois quando eu compacto o arquivo original, não necessariamente, os BYTES anteriores irão ter os 8 BITS, por isso eu preciso gravar apenas um BIT no arquivo…

Mas já valew pela a ajuda…

TAQ - Ciências da Computação - UFG

:grin:

Olá,
É impossível gravar um BIT sozinho!!! Isso não depende de linguágem e sim da arquitetura do hardware.
Vc deve preencher o resto do byte e escrever esse byte. E em algum lugar em um cabeçalho dizer quantos bits de PAD (bits adicionados para completar o byte mas que não fazem parte da compactação) e no algoritmo de descompactação usar esse parâmetro para ignorar o numero de bits do ultimo byte. Entendeu?

Falow!

[quote=“TAQ”]Certo, mas qual a classe que eu encontro este método para gravar UM UNICO BIT no arquivo??? Pois quando eu compacto o arquivo original, não necessariamente, os BYTES anteriores irão ter os 8 BITS, por isso eu preciso gravar apenas um BIT no arquivo…

Mas já valew pela a ajuda…

TAQ - Ciências da Computação - UFG

:grin:[/quote]

acredito que voce tera que implementarr o metodo…
ja ouvi falar em muitos metodos write de java, mas nunca em um que grave um bit apenas…

flw

Bem essa sua lógica é interessante, mas qual o método eu utilizo para gravar um BYTE em um arquivo??? e em qual classe eu o posso encontrar?? Vc falou em gravar em algum lugar em um cabeçalho, mas qual cabeçalho é este?? o do arquivo a ser salvos os BYTES???

Bem, vlws…

TAQ - Ciências da Computação - UFG

:grin:

Olá,
Vc está desenvolvendo um compactador não é?! Então, provavelmente o arquivo compactado tem um cabeçalho e nessa cabeçalho vc pode colocar a informação que eu falei no post anterior.
Quanto a classe pra escrever byte vc pode usar qqer classe que herde de OutputStream do pacote java.io. Verifica no javadoc o pacote IO e veja como funciona. Aconselho vc a usar DataOutputStream. Lá tem um writeByte().

Falow!

ou valew pela a ajuda pessoal, mas já consegui duas maneiras aki de resolver o problema, estas dicas que me passaram já deu uma base de melhoramento para as ideias aki que tive… agora e mão na massa e terminar… Eu vou usar a classe DataOutputStream, seu metodo writeByte() já faz tudo o que eu queria.
Bem e isso ai…

vlws… :grin:

TAQ - Ciências da Computação - UFG