Byte[] com length alta (30000), colocando todos os itens do byte[] na String (e não String[])

Bom eu tenho uma array em byte[] com mais ou menos a length da array de 30000

E aí é o seguinte, eu preciso passar cada item do array para uma String e cada item do array vai ser separado por , (duas vírgulas)

Como é descrito no código abaixo.

Mas pelo For Demora muitooooo, alguem tem alguma forma mais eficiente de fazer isso?

Fazendo alguma conversão de Byte[] para String e separado por “,” , com a excessão da “,” no primeiro e no ultimo item.


//o quest.get(i).getImagem1(); Pega um byte[] de uma Classe DAO, ele retorna byte[]
byte[] bytes_imagem1_em_bytes = quest.get(i).getImagem1();

                    String bytes_imagem1_em_bytes = "";
             


// "For" aqui que tá o problema, fazer dessa forma demora muitooo, levou muito tempo pra terminar isso aqui, travou tudo e ficou processando, até terminar, e demorou
                    for(int i2 = 0; i2 < bytes_imagem1_em_bytes.length; i2++){
                        if(i2 != 0) bytes_imagem1 += ",,";
                        System.out.println(i2);
                        bytes_imagem1 += bytes_imagem1_em_bytes[i2];
                    }

Ola Greg

O problema ai é a String ser imutavel, cada += esta criando um novo StringBuilder sem voce ver, gastando um tempo quadratico (tipo 30 mil ao quadrado operacoes!!).

Crie, fora do laço, um StringBuilder, e dentro do laco invoque o metodo append, em vez de +=. Ao termino do laco, invoque o toString que voce tera sua String. Voce vai se assustar com a diferenca de velocidade.

Perfeito cara, muito obrigado mesmo.

Ficou muiiiiiito mais rápido! :smiley:

vlw mesmo, Nunca havia usado o StringBuilder!

tô realmente precisando de uma dessas apostila da Caelum!