如何从字符串数组创建InputStream

时间:2012-01-25 16:11:54

标签: java java-io

我有一个字符串数组(实际上它是一个ArrayList),我想从中创建一个InputStream,数组的每个元素都是流中的一行。

我怎样才能以最简单,最有效的方式做到这一点?

5 个答案:

答案 0 :(得分:7)

您可以使用StringBuilder并将所有字符串附加到其中,中间有换行符。然后使用

创建输入流

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

我在这里使用UTF-8,但您可能必须使用不同的编码,具体取决于您的数据和要求。

另请注意,您可能必须包装该输入流,以便逐行读取内容。

但是,如果您不必使用输入流,只需迭代字符串数组就可以轻松编写代码并更容易维护解决方案。

答案 1 :(得分:3)

您可以尝试使用类ByteArrayInputStream,您可以给出一个字节数组。但首先必须将List转换为字节数组。请尝试以下方法。

    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);
    }

答案 2 :(得分:0)

最简单的方法是在StringBuilder中将它们粘合在一起,然后将生成的String传递给StringReader。

答案 3 :(得分:0)

更好的方法是使用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) {
}

答案 4 :(得分:0)

我这样做是因为你可以跳过一些复制,因此与 StringBuilder 方法相比是垃圾。

selectionchange