我有一个字符串数组(实际上它是一个ArrayList),我想从中创建一个InputStream,数组的每个元素都是流中的一行。
我怎样才能以最简单,最有效的方式做到这一点?
答案 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