2011-08-17 20 views

Trả lời

29

Bạn muốn có một SequenceInputStream và một vài số ByteArrayInputStream s. Bạn có thể sử dụng String.getBytes để tạo các byte cho sau này. SequenceInputStream là cổ xưa, vì vậy đó là một chút vụng về để sử dụng:

InputStream middle ; 
String beginning = "Once upon a time ...\n"; 
String end = "\n... and they lived happily ever after."; 
List<InputStream> streams = Arrays.asList(
    new ByteArrayInputStream(beginning.getBytes()), 
    middle, 
    new ByteArrayInputStream(end.getBytes())); 
InputStream story = new SequenceInputStream(Collections.enumeration(streams)); 

Nếu bạn có rất nhiều nhân vật để thêm, và không muốn chuyển đổi chúng sang byte en masse, bạn có thể đặt chúng trong một StringReader, sau đó sử dụng ReaderInputStream từ Commons IO để đọc chúng dưới dạng byte. Nhưng bạn sẽ cần phải thêm Commons IO vào dự án của bạn để làm điều đó. Mã chính xác cho điều đó được để lại như một bài tập cho người đọc.

+0

Chi tiết xin vui lòng? Cảm ơn các tên lớp tiện dụng. – pqn

+2

Nếu bạn đọc javadoc cho những lớp đó, nó khá rõ ràng. Xây dựng một ByteArrayInputStream đầu tiên (chúng ta hãy gọi nó là head) chứa các byte của phần đầu, phần thứ hai chứa các byte của phần cuối (chúng ta hãy gọi nó là đuôi), và xây dựng một SequenceInputStream từ đầu, luồng đầu vào gốc và đuôi. –

+0

Cảm ơn bạn! Tôi đã thực hiện công việc này ngay bây giờ. – pqn

0

1 Tạo mới OutputStream, được hỗ trợ bởi một mảng byte như Greg được đề xuất ..
2 Viết ký tự đầu vào OutputStream mới.
3 Sao chép InputStream hiện tại của bạn vào OutputStream mới.
4 Viết ký tự kết thúc vào OutputStream mới.
5 Đóng số OutputStream mới của bạn, chú ý bảo vệ mảng sao lưu.
6 Mở mảng chống sao lưu mới InputStream.

Hãy cho chúng tôi biết nếu bạn gặp sự cố với bất kỳ bước nào sau đây.

+0

Làm thế nào để bạn viết các ký tự vào một InputStream? –

+0

-1, Viết ký tự kết thúc vào InputStream mới của bạn. -> bạn không thể viết các ký tự vào một InputStream – GBa

+0

Rất tiếc! Khởi động lại não. Viết vào một dòng đầu ra, được hỗ trợ bởi một mảng byte như Greg nói. Giải nén mảng sao lưu và mở lại dưới dạng luồng đầu vào. Cảm ơn vì sự đúng đắn của bạn. – rossum