InputStream、Reader、String的相互转换

InputStream、Reader、String的相互转换是我们经常会遇到的情况,在此记录一下以备之后查阅。

String -> InputStream

1
2
String s = "Hello, World!!";
InputStream input = new ByteArrayInputStream(s.getBytes());

InputStream -> String

InputStream.read

1
2
3
4
5
6
StringBuilder out = new StringBuilder();
byte[] b = new byte[4096];
for (int n; (n = inputStream.read(b)) != -1;) {
out.append(new String(b, 0, n));
}
String s = out.toString();

Stream API

1
2
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.lines().collect(Collectors.joining());

Scanner

1
2
Scanner scanner = new Scanner(inputStream).useDelimiter("\\A");
String s = scanner.hasNext() ? scanner.next() : "";

IOUtils (Apache Utils)

1
String s = IOUtils.toString(inputStream, StandardCharsets.UTF_8);

CharStreams (Guava)

1
String s = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8));

InputStream -> Reader

1
Reader reader = new InputStreamReader(inputStream);

String -> Reader

1
2
String s = "Hello, World!!";
Reader reader = new StringReader(s);

Reader -> String

1
2
3
4
5
6
7
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
String s = stringBuilder.toString();
1
2
BufferedReader bufferedReader = new BufferedReader(reader);
String s = bufferedReader.lines().collect(Collectors.joining());

https://hype.codes/how-convert-inputstream-string-java