Java - Trình đọc vào InputStream

Trong hướng dẫn nhanh này, chúng ta sẽ xem xét việc chuyển đổi từ Reader sang InputStream - đầu tiên với Java thuần túy, sau đó với Guava và cuối cùng là với thư viện Apache Commons IO.

Bài viết này là một phần của loạt bài “Java - Back to Basic” trên Baeldung.

1. Với Java

Hãy bắt đầu với giải pháp Java:

@Test public void givenUsingPlainJava_whenConvertingReaderIntoInputStream_thenCorrect() throws IOException { Reader initialReader = new StringReader("With Java"); char[] charBuffer = new char[8 * 1024]; StringBuilder builder = new StringBuilder(); int numCharsRead; while ((numCharsRead = initialReader.read(charBuffer, 0, charBuffer.length)) != -1) { builder.append(charBuffer, 0, numCharsRead); } InputStream targetStream = new ByteArrayInputStream( builder.toString().getBytes(StandardCharsets.UTF_8)); initialReader.close(); targetStream.close(); }

Lưu ý rằng chúng ta đang đọc (và ghi) các khối dữ liệu tại một thời điểm.

2. Với Ổi

Tiếp theo - hãy xem giải pháp Guava đơn giản hơn nhiều :

@Test public void givenUsingGuava_whenConvertingReaderIntoInputStream_thenCorrect() throws IOException { Reader initialReader = new StringReader("With Guava"); InputStream targetStream = new ByteArrayInputStream(CharStreams.toString(initialReader) .getBytes(Charsets.UTF_8)); initialReader.close(); targetStream.close(); }

Lưu ý rằng chúng tôi đang sử dụng luồng nhập liệu ngoài hộp để biến toàn bộ chuyển đổi thành một lớp lót.

3. Với Commons IO

Cuối cùng - hãy xem xét giải pháp Commons IO - cũng là một lớp lót đơn giản:

@Test public void givenUsingCommonsIO_whenConvertingReaderIntoInputStream() throws IOException { Reader initialReader = new StringReader("With Commons IO"); InputStream targetStream = IOUtils.toInputStream(IOUtils.toString(initialReader), Charsets.UTF_8); initialReader.close(); targetStream.close(); }

Lưu ý rằng chúng tôi đang ở đây xử lý bất kỳ loại Trình đọc nào - nhưng nếu bạn đang làm việc cụ thể với dữ liệu văn bản, bạn nên chỉ định bộ ký tự một cách rõ ràng thay vì sử dụng mặc định JVM.

Và có bạn có nó - 3 cách đơn giản để chuyển đổi đọc vào một InputStream . Hãy chắc chắn rằng bạn đã xem qua mẫu trên GitHub.