Java中InputStream和String之间的转换方法

源码地址: https://github.com/pnunu/pnunu-io

在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的。

1、InputStream转化为String

1 JDK原生提供

方法一:
byte[] 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;

2 Apache Common提供

方法九:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name());
String 大专栏  Java中InputStream和String之间的转换方法 str = writer.toString();

方法十:
String str = IOUtils.toString(inputStream, "utf-8");

3 Google Guava提供

方法十一:
String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

方法十二:
String str = new String(ByteStreams.toByteArray(inputStream));

2、String转化为InputStream

1 JDK原生提供

InputStream is = new ByteArrayInputStream(str.getBytes());

2 Apache Common提供

InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name());

3 Google Guava提供

InputStream targetStream =
        new ReaderInputStream(CharSource.wrap(str).openStream(), StandardCharsets.UTF_8.name());

执行结果

InputStream2String.readInputStream01
readInputStream01, ms:215
InputStream2String.readInputStream02
readInputStream02, ms:426
InputStream2String.readInputStream03
readInputStream03, ms:1180
InputStream2String.readInputStream04
readInputStream04, ms:495
InputStream2String.readInputStream05
readInputStream05, ms:687
InputStream2String.readInputStream06
readInputStream06, ms:205
InputStream2String.readInputStream07
readInputStream07, ms:126
InputStream2String.readInputStream08
readInputStream08, ms:1432
InputStream2String.readInputStream09
readInputStream09, ms:96
InputStream2String.readInputStream10
readInputStream10, ms:124
InputStream2String.readInputStream11
readInputStream11, ms:110
InputStream2String.readInputStream12
readInputStream12, ms:135

原文地址:https://www.cnblogs.com/wangziqiang123/p/11696358.html

时间: 2024-10-09 20:23:16

Java中InputStream和String之间的转换方法的相关文章

Java中InputStream和String之间的转化

https://blog.csdn.net/lmy86263/article/details/60479350 在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的.1.InputStream转化为String1.1 JDK原生提供 方法一:byte[] bytes = new byte[0];bytes = new byte[inputStream.available()];inputStream.r

Java中int和string之间的互换

一.int---->string 1).s = i + ""; //会产生两个String对象 2).s = String.valueOf(i); //直接使用String类的静态方法,只产生一个对象 3).s = Integer.toString(i); 二.string---->int 1).i = Integer.parseInt(s); //直接使用静态方法,不会产生多余的对象,但会抛出异常 2).i = Integer.valueOf(s).intValue();

Java中字符串与日期之间的转换

项目过程中,经常遇到需要字符串格式的日期和Date类型的日期之间的相互转换.使用SimpleDateFormat类,可以方便完成想要的转换. SimpleDateFormat能够实现本地化的时间格式化及转换.从选定一个自定义的模式(pattren)开始,模式由已经定义好的 'A' to 'Z' 及 'a' to 'z'字母组成,也可以在模式中引入文本,但要使用’(单括号)括住.下图就是已经定义好的模式字母表: Letter Date or Time Component Presentation

Java中字节与对象之间的转换

近期公司里面用到了消息队列,而正如我们知道的是消息队列之间的是通过二进制形式的.以下就分享一下java中字节与对象之间的转换. 主要是用到了ByteArrayOutputStream和ObjectOutputStream两个输出流,以及ByteArrayInputStream和ObjectInputStream两个输入流. 废话不多说了,直接上代码吧! /** * @FileName: ByteToObject.java * @Package:com.test * @Description: T

Java 中基本类型和字符串之间的转换

Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使用String类的 valueOf() 方法 3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串 再来看,将字符串转换成基本类型有两种方法: 1. 调用包装类的 parseXxx 静态方法 2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱 PS:其他基

JAVA中int、String的类型转换

int -> String int i=12345;String s="";第一种方法:s=i+"";第二种方法:s=String.valueOf(i);这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String -> int s="12345";int i;第一种方法:i=Integer.parseInt(s);第二种方法:i=Integer.valueOf(s).intValue();这两种方法有什么区别

java中InputStream中read()与read(byte[] b) 用法介绍

本文章介绍了关于在java中InputStream中read()与read(byte[] b) 用法有需要了解这两个函数的朋友可以看看本文章. 这两个方法在抽象类InputStream中都是作为抽象方法存在的, JDK API中是这样描述两者的: read() :  从输入流中读取数据的下一个字节,返回0到255范围内的int字节值.如果因为已经到达流末尾而没有可用的字节,则返回-1.在输入数据可用.检测到流末尾或者抛出异常前,此方法一直阻塞. read(byte[] b) : 从输入流中读取一

java中如何将string 转化成long

1.Java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int radix]); long l = Long.valueOf("123").longValue(); 2.Long.ValueOf("String")与Long.parseLong("String")的区别 Long.ValueOf("St

Java中如何将String转成Date

Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Json数据的过程中提供了便利的注解,但是反序列化却没有,于是就引出了下面的问题,我需要手工的将字符串转换为Date类型的数据,java.text.SimpleDateFormat 为我们提供了这种转换的基础设施.如下列出了的格式化模式的简单定义,如果 ‘M’ 大于等于3位, 月份会显示为字母,否则是数