关于InputStream 和String对象之间的相互转换
代码如下:
package com.xin.stream; import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner; import org.apache.commons.io.IOUtils; import com.google.common.io.CharStreams; public class StreamUtil {
/**
* 将字符串转换为InputStream
* @param str
* @return
*/
public InputStream string2InputStream(String str){
return new ByteArrayInputStream(str.getBytes());
}
/**
* 采用jdk 的scanner 支持jdk1.5以上版本
*正则表达式中,\A是指一个字符串的开头,可能大家用惯了^,而忽略了这个\A, 但是^其实是指一行的开始,而不管一个字符串里面包含多少行,\A都只匹配第一行的开头
* 用\A作为分隔符,那么得到的当然就只有一个token,那就是整个字符串了。再配合Scanner,就轻易的将一个输入流转换为一个字符串了。
* 注意当需要做编码转换时,Scanner是有支持编码参数的构造方法的。
* @param is
* @return
*/
public String inputStream2String_Scanner(InputStream is){
// InputStream inputStream = new FileInputStream("d:/sample.txt");
StringBuilder stringBuilder = new StringBuilder();
Scanner scanner = new Scanner(is);
while(scanner.hasNext()){
String text = scanner.useDelimiter("\\A").next();
stringBuilder.append(text);
}
scanner.close();
return stringBuilder.toString();
}
/**
* JDK1.4 及之前的 BufferedReader 法
* @param is
* @return
*/
public String inputStream2String_BufferReader(InputStream is){
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
String line = null; ;
try {
while((line = bufferedReader.readLine()) != null){
stringBuilder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
/**
* JDK1.4 及之前的 readBytes 法
* 缓冲区的大小自己根据实际来调,比 BufferedReader 还简洁些,不需管换行符的事情。
* @param is
* @return
* @throws IOException
*/
public String inputStream2String_bytes(InputStream is) throws IOException{
StringBuilder stringBuilder = new StringBuilder(); byte[] buffer = new byte[1024];
int readBytes = 0;
while((readBytes = is.read(buffer)) > 0){
stringBuilder.append(new String(buffer, 0, readBytes));
}
return stringBuilder.toString();
}
/**
* Apache commons IOUtils.toString 法
* 第三方库就是第三方库,人家充分考虑到了你的感受,你对 JDK 库的抱怨,多简洁,一行搞定。
* IOUtils 还能把内容拷入其他的 Writer 中,如 IOUtils.copy(inputStream, new StringWriter())。
* @param is
* @return
* @throws IOException
*/
public String inputStream2String_IOUtils(InputStream is) throws IOException{
return IOUtils.toString(is);
}
/**
* Google guava 的 CharStreams 方法
* CharSteams 不是直接作用在 InputSteam 上的,还要靠 InputStreamReader 拱个桥。
* @param is
* @return
* @throws IOException
* @throws UnsupportedEncodingException
*/
public String inputStream2String_CharStreams(InputStream is) throws UnsupportedEncodingException, IOException{
return CharStreams.toString(new InputStreamReader(is, "UTF-8"));
}
/**
* JDK 7 的 NIO readAllBytes
* @param path 读取文件路径 C:\\Users\\Administrator\\Desktop\\ChinaNet上网密码.txt
* @return
* @throws IOException
*/
public String inputStream2String_readAllBytes(String path) throws IOException{
byte[] bytes = Files.readAllBytes(Paths.get(path));
String text = new String(bytes);
return text;
}
}
关于InputStream 和String对象之间的相互转换的更多相关文章
- 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换
[源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...
- inputStream、File、Byte、String等等之间的相互转换
一:inputStream转换 1.inputStream转为byte //方法一 org.apache.commons.io.IOUtils包下的实现(建议) IOUtils.toByteArray ...
- C# Enum Name String Description之间的相互转换
最近工作中经常用到Enum中Value.String.Description之间的相互转换,特此总结一下. 1.首先定义Enum对象 public enum Weekday { [Descriptio ...
- java int和String类型之间的相互转换
String --> int 第一种方法:int i = Integer.parseInt(s); 第二种方法:int i = Integer.valueOf(s).intValue(); 两种 ...
- [技巧篇]19.InputStream与String,Byte之间互转[转载]
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- 包装类、基本数据类型及String类之间的相互转换
包装类:8种基本数据类型对应一个类,此类即为包装类 一.基本数据类型 包装类 及String之间的转换 1.基本数据类型转化为包装类:调用包装类的构造器 int i=10; Inte ...
- InputStream与String,Byte之间互转
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- byte数组与对象之间的相互转换
在进行网络通信时可能需要传输对象,如果用NIO的话,只能用Bytebuffer和channel直接 通过ByteArray*Stream和Object*Stream可以将byte数组和对象进行相互的转 ...
- C# json与对象之间的相互转换
1. 添加命名空间 using System.Runtime.Serialization.Json; 2. WriteObject方法 // 从一个对象信息生成Json串 public static ...
随机推荐
- [原创]Devexpress XtraReports 系列 4 创建多栏报表
昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...
- HDU 2147 kiki's game (简单博弈,找规律)
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/1000 K (Java/Others)Total ...
- HDU 1564 Play a game (找规律博弈)
Play a game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- oracle学习 四(持续更新中)无法为表空间 MAXDATA 中的段创建 INITIAL 区
解决建立表的时候出现的 ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 出现这个问题是因为表空间的大小不足,可以给他扩容这样的话也会多出来一个数据文件.具体写法如下 ...
- sessionStorage 、localStorage 和 cookie 之间的区别
sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...
- java画图输出到磁盘
直奔主题,实战例子如下 package com.yuanmeng.jase; import java.awt.Color; import java.awt.Font; import java.awt. ...
- 如何查询redhat的版本信息
cat /etc/redhat-release lsb_release -a
- Java学习笔记之深入理解引用
引言:Java中数据传递的方式,除了基本数据类型是按照值传递,其它类型全部是按照引用传递,这和C++有很大区别,但是很多网上文章都解释的不清楚,甚至是错误的,在查阅资料之后,下面整理出一个比较容易理解 ...
- 关于java.lang.IllegalArgumentException: View not attached to window manager 错误的分析
今天遇到一个很奇特的问题,当用户设置了PIN码,在锁屏界面正常解锁PIN码后,进入Launcher时显示com.android.phone 已停止运行.一开始猜想会不会是解锁PIN码的时候处理导致了P ...
- linux下登入mysql和加压zip文件
1.类似于window中cmd登入一样 : mysql -u root -p ----> 回车 ---> 输入密码 就可以了 2. unzip abc.zip 直接进行解压 ...