2012-01-25 71 views
5

Tôi có một chuỗi các chuỗi (thực ra đó là một ArrayList) và tôi muốn tạo một InputStream từ nó, mỗi phần tử của mảng là một dòng trong luồng.Cách tạo một InputStream từ một chuỗi các chuỗi

Làm cách nào để tôi thực hiện điều này một cách dễ dàng và hiệu quả nhất?

+0

Tôi nhận được mảng từ một cuộc gọi lại và muốn thêm nó vào tệp zip dưới dạng ZipEntity (do đó là InputStream). Tôi cũng nghĩ về phương pháp StringBuilder, nhưng tôi hy vọng sẽ có một số đẹp hơn (một số wrapper InputStream) cách để làm điều đó ... – zacsek

Trả lời

6

Bạn có thể sử dụng một số StringBuilder và nối thêm tất cả các chuỗi vào đó với dấu ngắt dòng ở giữa. Sau đó tạo thêm một input stream sử dụng

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

Tôi đang sử dụng UTF-8 ở đây, nhưng bạn có thể phải sử dụng một mã hóa khác nhau, tùy thuộc vào dữ liệu và yêu cầu của bạn.

Cũng lưu ý rằng bạn có thể phải bao bọc luồng đầu vào đó để đọc dòng nội dung theo từng dòng.

Tuy nhiên, nếu bạn không phải sử dụng luồng đầu vào, việc lặp lại qua mảng chuỗi có lẽ sẽ dễ dàng mã và dễ bảo trì hơn.

0

Cách dễ nhất có thể là dán chúng lại với nhau trong một StringBuilder và sau đó chuyển chuỗi kết quả thành StringReader.

0

Cách tốt hơn là sử dụng lớp BufferedWriter. Có một mẫu:

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

bạn có thể thử sử dụng lớp ByteArrayInputStream mà bạn có thể cung cấp mảng byte. Nhưng trước tiên bạn phải chuyển đổi bạn Danh sách thành một mảng byte. Hãy thử những điều sau đây.

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); 
    } 
Các vấn đề liên quan