2012-01-25 13 views
5

Tengo una matriz de cadenas (en realidad es una lista de arreglos) y me gustaría crear un InputStream a partir de ella, siendo cada elemento de la matriz una línea en la secuencia.Cómo crear un InputStream a partir de una matriz de cadenas

¿Cómo puedo hacer esto de la manera más fácil y más eficiente?

+0

Obtengo la matriz de una devolución de llamada, y quiero agregarla a un archivo zip como ZipEntity (por lo tanto, el InputStream). También pensé en el método StringBuilder, pero esperaba que hubiera una forma más agradable de hacerlo (alguna forma de InputStream) ... – zacsek

Respuesta

6

Puede usar un StringBuilder y anexarle todas las cadenas con saltos de línea intermedios. A continuación, crear un flujo de entrada utilizando

new ByteArrayInputStream(builder.toString().getBytes("UTF-8"));

estoy usando UTF-8 aquí, pero puede que tenga que utilizar una codificación diferente, dependiendo de los datos y requisitos.

También tenga en cuenta que es posible que tenga que ajustar esa secuencia de entrada para leer el contenido línea por línea.

Sin embargo, si no tiene que usar una secuencia de entrada solo iterar sobre la matriz de cadenas probablemente sea la más fácil de codificar y una solución más fácil de mantener.

0

Lo más fácil podría ser unirlos en un StringBuilder y luego pasar la cadena resultante a StringReader.

0

La mejor manera es usar la clase BufferedWriter. Hay una muestra:

try { 
    List<String> list = new ArrayList<String>(); 
    BufferedWriter bf = new BufferedWriter(new FileWriter("myFile.txt")); 

    for (String string : list) { 
     bf.write(string); 
     bf.newLine(); 
    } 

    bf.close(); 
} catch (IOException ex) { 
} 
2

puede intentar utilizar la ByteArrayInputStream clase que se puede dar una matriz de bytes. Pero primero debe convertir su Lista a una matriz de bytes. Prueba lo siguiente.

List<String> strings = new ArrayList<String>(); 
    strings.add("hello"); 
    strings.add("world"); 
    strings.add("and again.."); 

    StringBuilder sb = new StringBuilder(); 
    for(String s : strings){ 
     sb.append(s);   
    } 

    ByteArrayInputStream stream = new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); 
    int v = -1; 
    while((v=stream.read()) >=0){ 
     System.out.println((char)v); 
    } 
Cuestiones relacionadas