Acho que voce esta certo. O array vai completo, nao so
os ultimos bytes do arquivo.
Pode ser isso. Vou checar.
Valeu. A proposito, nao sou Simone.
Sou o Andre. So uso o mail dela. :)
Abracos.
---Flavio Eduardo de Cordova <[EMAIL PROTECTED]> wrote:
>
> Cara Simone..
>
> Acredito que o arquivo possa estar sendo corrompido devido a forma
como voc�
> est� trabalhando com a leitura/envio do arquivo.. voc� le o arquivo
> utilizando um array e o envia � Stream de sa�da...
>
> Na leitura, o Java carrega o array com os bytes lidos do arquivo e
retorna a
> quantidade de bytes lidos. Na �ltima leitura, provavelmente a
quantidade de
> bytes lidos ser� inferior � quantidade de elementos do array e, se
voc�
> enviar todo o array para a stream de sa�da (neste caso, pela rede)
alguns
> bytes ir�o a mais, o que pode corromper o arquivo. :-)
>
>
> Fl�vio Eduardo de C�rdova
> Datasul S/A
> Ferramentas
>
> Sun Certified Java Programmer 1.1
>
> "If you don�t know where you want to go, any road will take you there"
>
>
> > -----Original Message-----
> > From: Simone Freire [SMTP:[EMAIL PROTECTED]]
> > Sent: Tuesday, February 02, 1999 9:55 AM
> > To: [EMAIL PROTECTED]
> > Subject: Transferencia de arquivos via Socket e BufferedInputStream
> >
> > Srs e Sras, Saudacoes.
> > Estive afastado, de ferias, por uns tempos, mas
> > agora estou de volta, e trouxe um pequeno problema.
> > Estou finalizando dois softwares, um cliente e um
> > servidor de chat, em java, e estou iniciando implementacao da rotina
> > de transferencia de arquivos,
> > cliente a cliente, via Socket e ServerSocket.
> >
> > Na minha rotina de teste, defino o arquivo com File e
> > o abro para leitura com FileInputStream, para leitura byte a byte,
> > repassando os bytes lidos para Socket.getOutputStream(), via
> > BufferedOutputStream. No outro lado da conexao, capturo os bytes com
> > Socket.getInputStream(), via BufferedInputStream. Funciona beleza
> > quando nao estou buferizando a leitura do arquivo no cliente de
> > origem, ou seja, leio um byte,transmito um byte, e assim
> > sucessivamente, so que fica lento, apesar de nao ocorrer degradacao
> > dos dados.
> >
> > Para encurtar o tempo de leitura, envolvi o FileInputStream, na
> > leitura do arquivo de origem, com
> > BufferedInputStream, e usei o metodo
> > read(byte[] b, int offset, int count) de BufferedInputStream para
ler
> > os bytes, definindo b como um buffer de 100 bytes, offset em 0 e
count
> > em 100, como em read(b,0,100). Ficou super rapido. So que degradou o
> > arquivo, ou seja, o arquivo de destino sempre fica maior que o de
> > origem. Como exemplo, defini a origem como sendo o Notepad.exe. Apos
> > gerado o destino, este nao executa de forma alguma, pois esta
> > corrompido. Analisei o codigo e reduzi o buffer para 4 bytes.
Funciona
> > sem problema. Aumentei o buffer para 5 bytes. Come�a a corromper o
> > arquivo. Nao consegui entender. Sera algum bug? Segue abaixo os
> > codigos dos
> > arquivos Main.java e Transf.java, cliente e servidor de sockets,
> > respectivamente. Em Main.java tem umas quatro linhas desabilitadas,
> > relativas a um gauge de progresso, que desabilitei pois a classe
ainda
> > nao esta pronta.
> >
> > Para testar Main.class e Transf.class, colocar os dois arquivos num
> > mesmo diretorio junto com uma copia do notepad.exe(que so serve para
> > teste, pode ser outro arquivo, desde que seja alterado o parametro
de
> > File em
> > Main.java). Executar Transf.class, com o comando
> > java Transf e depois executar Main.class, que eh so
> > uma janela de teste,com um botao que realiza a conexao e inicia a
> > transferencia, tudo bem primario, pois eh so teste.
> >
> > Desculpem o "jornal" acima, mas procurei descrever bem o problema.
> > Conto com a ajuda de voces.
> > Andre.
> >
> > Codigo do Main.java
> > -------------------
> >
> > import java.awt.*;
> > import java.io.*;
> > import java.awt.event.*;
> > import java.net.*;
> >
> > public class Main extends Frame implements ActionListener {
> > Gauge g;
> > Label l1;
> > public Main() {
> > super.setTitle("Teste de transferencia de arquivo");
> > setSize(300,300);
> > setLayout(new FlowLayout(FlowLayout.CENTER));
> > Button b1=new Button("Transfere");
> > add(b1);
> > //g=new Gauge();
> > //add(g);
> > l1=new Label(" ");
> > add(l1);
> > b1.addActionListener(this);
> > Dimension d=getToolkit().getScreenSize();
> > setLocation((d.width-getSize().width)/2,
> > (d.height-getSize().height)/2);
> > setVisible(true);
> > }
> >
> > public void actionPerformed(ActionEvent evt) {
> > try {
> > Socket s=new Socket("127.0.0.1",5500);
> > File f=new File("notepad.exe");
> > //g.setMaxValue(f.length());
> > FileInputStream fi=new FileInputStream(f);
> > BufferedInputStream bi=new BufferedInputStream(fi);
> > int c;
> > int nrBytes=0;
> > byte[] b=new byte[4];
> > BufferedOutputStream bOut=
> > new
> > BufferedOutputStream(s.getOutputStream());
> > while ((c=bi.read(b,0,4))!=-1) {
> > //System.out.println(c);
> > bOut.write(b);
> > bOut.flush();
> > nrBytes+=c;
> >
> > l1.setText(Integer.toString(nrBytes*100/(int)f.length()));
> > //g.setPosition(nrBytes);
> >
> >
> >
> > }
> > bOut.close();
> > System.out.println("gravou");
> >
> >
> >
> > }
> > catch (IOException e) {
> > System.out.println("Houve erro de conexao");
> > }
> > }
> >
> > public static void main(String[] args) {
> > new Main();
> > }
> > }
> >
> >
> >
> > Codigo do Transf.java
> > =====================
> >
> > import java.net.*;
> > import java.io.*;
> >
> > public class Transf {
> > Socket s;
> > public Transf() {
> > try {
> > ServerSocket ss=new ServerSocket(5500);
> > s=ss.accept();
> > File f=new File("saida.exe");
> > FileOutputStream fOut=
> > new FileOutputStream(f);
> > BufferedInputStream bi=new BufferedInputStream(
> > s.getInputStream());
> > int c;
> > byte[] b=new byte[4];
> >
> > while ((c=bi.read(b,0,4))!=-1) {
> >
> > fOut.write(b);
> > }
> > }
> > catch (IOException e) {
> > fecha();
> > }
> > }
> >
> > public void fecha() {
> > try {
> > s.close();
> > }
> > catch (IOException e) {
> > }
> > }
> >
> > public static void main(String[] args) {
> > new Transf();
> >
> >
> > }
> > }
> >
> >
> >
> >
> >
> >
> >
>
=== message truncated ===
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com
* Para nao receber mais e-mails da lista, acesse
<http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha a
lista <[EMAIL PROTECTED]> e de um <submit>.