Java中InputStream和String之间的转换方法
2017-03-05 22:09
375 查看
在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。
针对一个2MB的文件的输入流,多次执行测试如下(单位是毫秒):
方法十: 111
方法十一: 236
方法十二: 36
方法一: 36
方法二: 87
方法三: 66
方法四: 101
方法五: 178
方法六: 40
方法七: 21
方法八: 107
方法九: 31
从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些。
1、InputStream转化为String
1.1 JDK原生提供
方法一: byte[] bytes = new byte[0]; bytes = new byte[inputStream.available()]; inputStream.read(bytes); String str = new String(bytes);
方法二: String result = new BufferedReader(new InputStreamReader(inputStream)) .lines().collect(Collectors.joining(System.lineSeparator()));
方法三: String result = new BufferedReader(new InputStreamReader(inputStream)) .lines().parallel().collect(Collectors.joining(System.lineSeparator()));
方法四: Scanner s = new Scanner(inputStream).useDelimiter("\\A"); String str = s.hasNext() ? s.next() : "";
方法五: String resource = new Scanner(inputStream).useDelimiter("\\Z").next(); return resource;
方法六: StringBuilder sb = new StringBuilder(); String line; BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); while ((line = br.readLine()) != null) { sb.append(line); } String str = sb.toString(); return str;
方法七: ByteArrayOutputStream result = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { result.write(buffer, 0, length); } String str = result.toString(StandardCharsets.UTF_8.name()); return str;
方法八: BufferedInputStream bis = new BufferedInputStream(inputStream); ByteArrayOutputStream buf = new ByteArrayOutputStream(); int result = bis.read(); while(result != -1) { buf.write((byte) result); result = bis.read(); } String str = buf.toString(); return str;
1.2 Apache Common提供
方法九: StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name()); String str = writer.toString();
方法十: String str = IOUtils.toString(inputStream, "utf-8");
1.3 Google Guava提供
方法十一: String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
方法十二: String str = new String(ByteStreams.toByteArray(inputStream));
针对一个2MB的文件的输入流,多次执行测试如下(单位是毫秒):
方法十: 111
方法十一: 236
方法十二: 36
方法一: 36
方法二: 87
方法三: 66
方法四: 101
方法五: 178
方法六: 40
方法七: 21
方法八: 107
方法九: 31
从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些。
2、String转化为InputStream
2.1 JDK原生提供
InputStream is = new ByteArrayInputStream(str.getBytes());
2.2 Apache Common提供
InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name());
2.3 Google Guava提供
InputStream targetStream = new ReaderInputStream(CharSource.wrap(str).openStream(), StandardCharsets.UTF_8.name());
相关文章推荐
- Java中InputStream和String之间的转换方法
- java中byte,String,InputStream之间的转换
- java中byte []、String、inputstream之间的转换
- Java 里把 InputStream 转换成 String 的几种方法
- Java 里把 InputStream 转换成 String 的几种方法
- java中byte,String,InputStream之间的转换
- java中byte,String,InputStream之间的转换
- java中byte,String,InputStream之间的转换
- Java 里把 InputStream 转换成 String 的几种方法
- Java 里把 InputStream 转换成 String 的几种方法
- [Java] double与String之间的相互转换方法[转]
- [Java] double与String之间的相互转换方法
- Java 里把 InputStream 转换成 String 的几种方法
- java中byte,String,InputStream之间的转换
- java中byte,String,InputStream之间的转换
- Java 里把 InputStream 转换成 String 的几种方法
- java中int和string类型之间转换的几种方法
- Java 里把 InputStream 转换成 String 的几种方法
- [Java] double与String之间的相互转换方法
- Java 里把 InputStream 转换成 String 的几种方法