Làm cách nào để chuyển đổi Chuỗi thành InputStream trong Java?


Câu trả lời:


1410

Như thế này:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

Lưu ý rằng điều này giả định rằng bạn muốn InputStream là một luồng byte đại diện cho chuỗi ban đầu của bạn được mã hóa dưới dạng UTF-8 .

Đối với các phiên bản Java dưới 7, thay thế StandardCharsets.UTF_8bằng "UTF-8".


1
Bộ ký tự này không bị mất khi thực hiện: Chuỗi -> byte -> ByteArrayInputStream? Khi thử điều này trên ví dụ "ü", các byte sẽ có chữ cái đúng, nhưng ByteArrayInputStream sẽ mất chuyển đổi đúng. Hoặc là tôi sai?
Jonathan Ramos

20
StandardCharsets yêu cầu cấp API tối thiểu 19.
Nantoka

3
@JonathanRamos không phải là luồng để giữ chuyển đổi. Tùy thuộc vào bất cứ điều gì đang giải mã các byte trở lại thành chuỗi.
Cruncher

26
@Nantoka Thay vì StandardCharsets.UTF_8, bạn có thể sử dụng Charset.forName ("UTF-8") cho bất kỳ Cấp API nào.
PJ_Finnegan

công việc của nó chỉ là tôi thêm String newStr = URLDecoder.decode (URLEncoder.encode (hồi đáp, "iso8859-1"), "UTF-8"); cho (utf8)
sirmagid

275

Tôi thấy rằng việc sử dụng Apache Commons IO giúp cuộc sống của tôi dễ dàng hơn nhiều.

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

Bạn có thể thấy rằng thư viện cũng cung cấp nhiều phím tắt khác cho các tác vụ thường được thực hiện mà bạn có thể sử dụng trong dự án của mình.


5
Họ đã sử dụng ByteArrayInputStream mới (exampleString.getBytes ("UTF-8")). Vì vậy, nó sẽ được tối ưu hóa cách sử dụng luồng InputStream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar

9
@PankajKumar: Trình biên dịch JIT của Java không chỉ có khả năng nội tuyến này.
Andrew White

8
Sử dụng một phương pháp không chỉ định mã hóa là một ý tưởng tồi tệ ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache commons bao gồm một dạng khác của phương thức này, lấy mã hóa làm tham số thứ hai (mà bạn nói đúng, thích hợp hơn): InputStream in = IOUtils.toInputStream (nguồn, "UTF-8");
Cuga

8
Bạn có thể sử dụng StandardCharsets.UTF_8định nghĩa thay vì văn bản đơn giản.
douecraftlps 7/07/2015

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.