2012-01-25 11 views
5

Mam tablicę ciągów (w rzeczywistości jest to ArrayList) i chciałbym utworzyć z niego InputStream, każdy element tablicy jest linią w strumieniu.Jak utworzyć InputStream z tablicy łańcuchów

Jak mogę to zrobić w najprostszy i najbardziej efektywny sposób?

+0

Dostaję tablicę z wywołania zwrotnego i chcesz go dodać do pliku zip jako ZipEntity (dlatego InputStream). Myślałem także o metodzie StringBuilder, ale miałem nadzieję, że będzie trochę ładniej (niektóre opakowanie InputStream), aby to zrobić ... – zacsek

Odpowiedz

6

Można użyć StringBuilder i dołączyć do niego wszystkie łańcuchy z liniowymi przerwami pomiędzy nimi. Następnie należy utworzyć strumień wejściowy z wykorzystaniem

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

Używam tutaj UTF-8, ale może trzeba użyć innego kodowania, w zależności od danych i wymagań.

Należy również pamiętać, że może być konieczne zawinięcie tego strumienia wejściowego w celu odczytania treści wiersz po linii.

Jednakże, jeśli nie musisz używać strumienia wejściowego, to po prostu iteracja po tablicy łańcuchów prawdopodobnie będzie łatwiejsze do kodowania i łatwiejsze w utrzymaniu rozwiązania.

0

Najprostszym rozwiązaniem może być sklejenie ich w StringBuilderze, a następnie przekazanie wynikowego ciągu do StringReader.

0

Lepszym sposobem jest użycie klasy BufferedWriter. Jest jeszcze jedna próba:

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

można spróbować użyć klasy ByteArrayInputStream że można dać tablicę bajtów. Ale najpierw musisz przekonwertować List do tablicy bajtów. Spróbuj wykonać następujące czynności.

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); 
    } 
Powiązane problemy