Tôi có một String
mà tôi muốn sử dụng như một InputStream
. Trong Java 1.0, bạn có thể sử dụng java.io.StringBufferInputStream
, nhưng điều đó đã xảy ra @Deprecrated
(có lý do chính đáng - bạn không thể chỉ định mã hóa bộ ký tự):
Lớp này không chuyển đổi đúng các ký tự thành byte. Kể từ JDK 1.1, cách ưu tiên để tạo luồng từ một chuỗi là thông qua
StringReader
lớp.
Bạn có thể tạo một java.io.Reader
với java.io.StringReader
, nhưng không có bộ điều hợp nào để lấy Reader
và tạo một InputStream
.
Tôi đã tìm thấy một lỗi cổ xưa yêu cầu một sự thay thế phù hợp, nhưng không có thứ gì tồn tại - theo như tôi có thể nói.
Cách giải quyết được đề xuất của oft là sử dụng java.lang.String.getBytes()
làm đầu vào cho java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
nhưng điều đó có nghĩa là hiện thực hóa toàn bộ String
trong bộ nhớ dưới dạng một mảng byte và đánh bại mục đích của một luồng. Trong hầu hết các trường hợp, đây không phải là vấn đề lớn, nhưng tôi đang tìm kiếm thứ gì đó có thể duy trì ý định của một luồng - rằng càng ít dữ liệu càng tốt được (lại) hiện thực hóa trong bộ nhớ.