[RESOLVIDO] DataOutputStream 3x mais lento que o ObjectOutputStream

Galera,

tenho os dois códigos abaixo:


   public boolean writeObject(Object ob) throws Exception{
      
         
                 
         
         byte[] bs = cripto.serializar(ob);
         
         System.out.println("Tamanho original "+bs.length);
         
         byte[] compactado = zh.zipaDados(bs);
         
         
         System.out.println("Tamanho do envio: "+compactado.length);
      
      		
      		   	
         
                  
                  //byte[] tudo = new byte[tipo.length + bs.length];
                  //System.arraycopy(tipo, 0, tudo, 0, tipo.length);
                  //System.arraycopy(bs, 0, tudo, tipo.length, bs.length);
         
*****************output é um DataOutputStream


         output.writeInt(compactado.length);
         
         for (byte b : compactado)
            output.writeByte(b);
         output.flush();
                  
               	
               	
         return true;
         
               
         
      
      }

e o seguinte:


  public boolean writeObject(Object ob) throws Exception{
         	
         ObjectOutputStream ostream2 = new ObjectOutputStream(sok.getOutputStream());
         ostream2.writeObject(ob);
       
         ostream2.flush();
      
         return true;
      }  

Acontece q, excluindo o tempo de compactação e serialização, o ObjectOS é 3x mais rápido… sou ruim nisso, nao estou conseguindo colocar um buffer nesse DataOS, q é o q a galera recomenda… o que há de errado no código?

Um BufferedOutputStream pode ser adicionado ao seu DataOutputStream, e você pode indicar um tamanho maior de buffer que o padrão de 8KB que o BufferedOutputStream tem. Vou dar um exemplo com arquivos.

DataOutputStream dos = new DataOutputStream (new BufferedOutputStream (new FileOutputStream ("teste.bin"), buffersize));

hummmmmm começando a esclarecer, esse 8 kb é o default?

olha o que eu tinha feito:
input = new DataInputStream(new BufferedInputStream( s.getInputStream( ), 4096 ));

só q isso aki já nao funfa…

output = new DataOutputStream(new BufferedOutputStream( s.getInputStream( ), 4096 ));

hahuahuahuahuahu com o input nao funfa mesmo… agora acertei…

output = new DataOutputStream(new BufferedOutputStream( s.getOutputStream( ), 4096));

Qual o melhor tamanho de buffer?

O padrão é 8KB. O tamanho melhor só dá para saber testando e vendo que tamanho é melhor para sua aplicação. Depende, por exemplo, da estratégia de bufferização do sistema operacional quanto a arquivos em disco, e também do disco em si.