Performance utilizando FileWriter

2 respostas
tiagops

Pessoal,

tô com a seguinte dúvida.

Tenho uma aplicação que funciona como um serviço e roda em back ground.

Gostaria de fazer um log de algumas chamadas que faco nesta aplicação.

Estava pensando em utilizar o FileWriter, para gerar um arquivo.

FileWriter(String fileName,
boolean append)

A dúvida é a seguinte: Se este arquivo estiver com 10MB por exemplo, quando eu criar o objeto, o java vai ler este arquivo até chegar no final e consumir tempo ou irá somente gravar no final do arquivo a string que eu passar?

Obrigado!

2 Respostas

T

Quanto ao log, use o Log4J - não reinvente a roda. O Log4J tem umas coisas interessantes, como:

  • Você pode limitar o tamanho do arquivo de log (RollingFileAppender) - para não estourar o disco - mas de forma que sempre você tem a informação mais atualizada - deleta os logs antigos;
  • Você pode mostrar em cada linha o nome da classe, do método e a linha do arquivo onde foi chamada a função de log;
  • Você pode ligar o log só para algumas classes, ou packages;
  • e por aí vai.

Se você não pode usar o Log4J (sabe como é que é, às vezes o seu cliente não deixa, porque não pode usar nada opensource, ou então não está homologado, ou então porque ele não gosta mesmo…) então não se preocupe com o modo Append = true. Ele só abre o arquivo e já vai direto para o fim dele; não o relê - ou seja, não deve acarretar grandes problemas de desempenho. O que ocorre fisicamente:

  • O Java chama a API do sistema operacional para abrir o arquivo em modo append (quando você dá um “new FileWriter()”)
  • O Java chama a API para escrever X bytes (quando você usa “write”)
  • O sistema operacional vai até o último bloco do arquivo (depende do tamanho do cluster), lê-o, posiciona o ponteiro de arquivos na última posição do arquivo (que está dentro do bloco, se o ponteiro não for múltiplo do tamanho do cluster), copia os seus bytes para o buffer de gravação, e se for o caso (aí depende de um monte de coisas), grava os bytes do buffer de volta para o cluster, e se for o caso (depende de mais coisas ainda) o cluster é gravado no disco.
tiagops

Valeu, vou considerar a ideia de utilizar o Log4J ! :wink:

Criado 5 de maio de 2005
Ultima resposta 5 de mai. de 2005
Respostas 2
Participantes 2