Tôi có một số InputStream
mà tôi cần thêm ký tự vào đầu và cuối, và sẽ kết thúc bằng một biến loại InputStream
. Làm thế nào tôi có thể dễ dàng làm điều này?Thêm ký tự vào đầu và cuối InputStream trong Java
Trả lời
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.
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.
Làm thế nào để bạn viết các ký tự vào một InputStream? –
-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
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
Chi tiết xin vui lòng? Cảm ơn các tên lớp tiện dụng. – pqn
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. –
Cảm ơn bạn! Tôi đã thực hiện công việc này ngay bây giờ. – pqn