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 NIOvà 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
Stringthành một byte[]mảng để chuyển đổi các byte trở lại charsau đó 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) Readerchức năng trong số InputStreamReader, hoặc b) InputStreamchức năng ra khỏi InputStreamReader? Bạn sẽ không nhận được b). InputStreamReaderkhông phải là một InputStream.
Mục đích của InputStreamReaderviệ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 Readerra 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.