String和inputstream互转

2020-01-26 18:06:15

1、字符串转inputStream

 

Java代码  收藏代码

  1. String string;  

  2.   

  3. InputStream is = new ByteArrayInputStream(string.getBytes());  

 

2、InputStream转字符串

 

Java代码  收藏代码

  1. ByteArrayOutputStream baos = new ByteArrayOutputStream();  

  2. int i;  

  3. while ((i = is.read()) != -1) {  

  4.     baos.write(i);  

  5. }  

  6. String str = baos.toString();  

  7. System.out.println(str);  

 

3、String写入OutputStream

 

Java代码  收藏代码

  1. OutputStream os = System.out;  

  2. os.write(string.getBytes());  

 

4、OutputStream写入String

 

这听起来有点荒谬,OutputStream本来就是输出源,还写入String?

不过最近项目里确实遇到了个类似的问题,比如 SOAPMessage.writeTo(OutputStream os) 这个方法,是将SOAPMessage的内容写到一个输出流中,而我想得到这个流的内容,总不能把他先写进文件再去读这个文件吧,研究了好半天,终于想起可以如下这般:

 

Java代码  收藏代码

  1. ByteArrayOutputStream baos = new ByteArrayOutputStream();  

  2.   

  3. String str = baos.toString();  

 

 

 

将InputStream/OutputStream转换成string

 

这里需要用到一个特殊的类ByteArrayOutputStream,利用他,我们可以将输出流在内存中直接转换成String类型。

具体代码如下:

 

首先从输入流中将数据读出来写入ByteArrayOutputStream,然后再将其转换成String.

 

Java代码  收藏代码

  1. InputStream in = urlconn.getInputStream();  

  2.   

  3. ByteArrayOutputStream bos = new ByteArrayOutputStream();  

  4.   

  5.   

  6. byte[] buffer = new byte[2048];  

  7. int length = 0;  

  8. while((length = in.read(buffer)) != -1) {  

  9.     bos.write(buffer, 0, length);  

  10. }  

  11. in.close();  

  12.   

  13.   

  14. new String(bos.toByteArray(), "UTF-8");  

  15.   

  16.   

 

根据同样的原理,我们可以将outputstream直接转换成String对象。

 

 

指定一下字符集
byte[] b = str.getBytes("utf-8");
String s = new String(b,"utf-8");

 

 

OUTPUTSTREAM中方法WRITE用法

 

 void write(byte[] b) 
          将 b.length 个字节从指定的 byte 数组写入此输出流。 
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 
abstract  void write(int b) 
          将指定的字节写入此输出流。


  • 2019-09-08 15:09:14

    IDEA从mapper.java跳转到mapper.xml

    在IDEA中写项目后台的时候,从controller到service到mapper到dao,都可以直接跳转,但是mapper.java到mapper.xml就需要自行寻找,为了开发方便,安装相应插件--mybais

  • 2019-09-08 21:44:15

    git pre-commit hook failed 解决办法

    今天在上传项目的时候在commit阶段遇到一个问题,无论是在Sourcetree上传还是用命令git commit -m 'xxx'都报了一下错误:

  • 2019-09-08 21:45:31

    git index.lock

    因是在你进行某些比较费时的git操作时自动生成,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个操作。 有时强制关闭进行中的git操作,这个文件没有被自动删除,之后你就无法进行其他操作,必须手动删除,进入.git文件中删除,打开显示隐藏文件。如果没有看见.git文件夹,可以直接用命令rm -f ./.git/index.lock。之后就可以正常使用。 ———————————————— 版权声明:本文为CSDN博主「李瑞豪」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_39520417/article/details/81941111

  • 2019-09-09 05:28:54

    IntelliJ IDEA 进阶教程: 语言注入

    我真的太久没发 IntelliJ 的教程了,最近 Sakura 同学找我帮他配 IntelliJ ,我秀了一下技术,假装自己是老司机。 然后发现 Language Injection 这个非常好用的功能我居然没写教程(很明显,一堆人不知道这个东西), 于是我又开始写教程了。 本文多图。

  • 2019-09-09 05:32:55

    SrpingBoot 热启动与热部署

    当我们已经启动了一个服务,然后修改代码之后,会自动重新部署。Spring项目通常有新内容修改后需要重新编译然后运行。通过配置Spring boot的热启动配置,可以实现自动编译重启项目,通常要比手动停止,启动项目快。