Câu trả lời:
ByteArrayInputStream cũng thực hiện thủ thuật:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Sau đó chuyển đổi sang người đọc:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Vì: JDK1.0 Không có lý do nhỏ nhất nào để cho rằng lớp này là loại kể từ Java 1.4. Số phiên bản sai đó đặc biệt kỳ lạ khi Java 1.4 được giới thiệu NIO
và việc giới thiệu một API và người kế thừa của nó trong cùng một phiên bản là vô nghĩa.
Tôi cũng tìm thấy lớp apache commons IOUtils
, vì vậy:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
sẽ mất mát
String
thành một byte[]
mảng để chuyển đổi các byte trở lại char
sau đó là
Nó có phải đặc biệt là InputStreamReader không? Làm thế nào về việc sử dụng StringReader ?
Mặt khác, bạn có thể sử dụng StringBufferInputStream , nhưng nó không được hỗ trợ vì các vấn đề chuyển đổi ký tự (đó là lý do tại sao bạn nên thích StringReader).
Câu hỏi tương tự như @Dan - tại sao không phải StringReader?
Nếu nó phải là InputStreamReader, thì:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Bạn đang cố gắng để có được một) Reader
chức năng trong số InputStreamReader
, hoặc b) InputStream
chức năng ra khỏi InputStreamReader
? Bạn sẽ không nhận được b). InputStreamReader
không phải là một InputStream
.
Mục đích của InputStreamReader
việc lấy một InputStream
- một nguồn byte - và giải mã các byte thành ký tự ở dạng a Reader
. Bạn đã có dữ liệu của mình dưới dạng ký tự (Chuỗi gốc). Mã hóa Chuỗi của bạn thành byte và giải mã byte trở lại ký tự sẽ là một hoạt động dự phòng.
Nếu bạn đang cố gắng lấy Reader
ra khỏi nguồn của mình, hãy sử dụng StringReader
.
Nếu bạn đang cố gắng để có được một InputStream
(chỉ cung cấp cho bạn byte), hãy sử dụng dấu phẩy apache IOUtils.toInputStream(..)
như được đề xuất bởi các câu trả lời khác ở đây.