2010-08-24 14 views
5

Hiho,copiar una secuencia vía byte []

tengo que copiar un inputstream. Y después de buscar un poco en la red, probé esto con la ayuda de un bytearray. Mi código es el siguiente ("es" es el flujo de entrada):

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    while (is.read() != -1) { 
     bos.write(is.read()); 
    } 
    byte[] ba = bos.toByteArray(); 

    InputStream test = new ByteArrayInputStream(ba); 
    InputStream test2 = new ByteArrayInputStream(ba); 

Y funciona .. casi

En tanto la corriente, el Programm copiar sólo cada segundo carácter Así "DOR A =" 104 "/>" en el "es" -corriente se convierte en: "O = 14 /" en las otras corrientes

¿Cuál es el problema? No puedo entender lo que está pasando.

Esperanza alguien me podría dar la solución :)

saludos

Respuesta

6

Tiene que asignar el byte de lectura en el bucle de while a una variable. En tu código actual, simplemente lo descartas. El siguiente es correcto:

int b; 
while((b = read()) != -1) { 
    bos.write(b); 
} 

Por supuesto, la lectura de bytes individuales no es muy eficiente. Debería considerar usar matrices de bytes en su próxima versión.

+1

¡Muchas gracias! entiendo cuál era el problema :) (porque usé el método de lectura dos veces, salta dos veces) – Graslandpinguin

+0

No es correcto. No compila No puede declarar una variable dentro de una condición while. – EJP

+0

@EJP: Entonces, ¿por qué retiró su corrección (y probablemente optó por votar negativamente en su lugar)? – musiKk

16

Eso es porque ignoran todos los personajes extraños a menos que fueran -1, llamando a leer() dos veces en el bucle. Esta es la forma correcta utilizando un tampón (se puede sintonizar el tamaño del buffer):

int count; 
byte[] buffer = new byte[8192]; 
while ((count = in.read(buffer)) > 0) 
    out.write(buffer, 0, count);