Как создать InputStream из массива строк - PullRequest
5 голосов
/ 25 января 2012

У меня есть массив строк (на самом деле это ArrayList), и я хотел бы создать InputStream из него, каждый элемент массива представляет собой строку в потоке.

Как это сделать всамый простой и эффективный способ?

Ответы [ 4 ]

7 голосов
/ 25 января 2012

Вы можете использовать StringBuilder и добавлять все строки к нему с разрывами строк между ними. Затем создайте поток ввода, используя

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

Я использую UTF-8 здесь, но вам, возможно, придется использовать другую кодировку, в зависимости от ваших данных и требований.

Также обратите внимание, что вам, возможно, придется обернуть этот входной поток, чтобы читать содержимое построчно.

Однако, если вам не нужно использовать входной поток, просто итерируя по массиву строк, вероятно, будет проще кодировать и легче поддерживать решение.

3 голосов
/ 25 января 2012

вы можете попробовать использовать класс ByteArrayInputStream, который вы можете дать байтовый массив.Но сначала вы должны преобразовать свой список в байтовый массив.Попробуйте следующее.

    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);
    }
0 голосов
/ 25 января 2012

Лучший способ - использовать класс BufferedWriter. Есть один образец:

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) {
}
0 голосов
/ 25 января 2012

Возможно, проще всего склеить их вместе в StringBuilder, а затем передать полученную строку в StringReader.

...