代码如下:

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对象之间的相互转换的更多相关文章

  1. 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换

    [源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...

  2. inputStream、File、Byte、String等等之间的相互转换

    一:inputStream转换 1.inputStream转为byte //方法一 org.apache.commons.io.IOUtils包下的实现(建议) IOUtils.toByteArray ...

  3. C# Enum Name String Description之间的相互转换

    最近工作中经常用到Enum中Value.String.Description之间的相互转换,特此总结一下. 1.首先定义Enum对象 public enum Weekday { [Descriptio ...

  4. java int和String类型之间的相互转换

    String --> int 第一种方法:int i = Integer.parseInt(s); 第二种方法:int i = Integer.valueOf(s).intValue(); 两种 ...

  5. [技巧篇]19.InputStream与String,Byte之间互转[转载]

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  6. 包装类、基本数据类型及String类之间的相互转换

    包装类:8种基本数据类型对应一个类,此类即为包装类 一.基本数据类型 包装类 及String之间的转换 1.基本数据类型转化为包装类:调用包装类的构造器      int i=10;     Inte ...

  7. InputStream与String,Byte之间互转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  8. byte数组与对象之间的相互转换

    在进行网络通信时可能需要传输对象,如果用NIO的话,只能用Bytebuffer和channel直接 通过ByteArray*Stream和Object*Stream可以将byte数组和对象进行相互的转 ...

  9. C# json与对象之间的相互转换

    1. 添加命名空间 using System.Runtime.Serialization.Json; 2. WriteObject方法 // 从一个对象信息生成Json串 public static ...

随机推荐

  1. 如何申请TexturePacker注册码

    TexturePacker是一款很强大的游戏图片制作工具,网上有很多关于它的教程和说明,这里不再说它的作用和好处.这里只是说一下如何申请免费的注册码. 国人都习惯了使用免费或者破解的软件,但是使用破解 ...

  2. Cisco ASA5500系列防火墙恢复IOS全过程

    擦除防火墙配置的命令是write erase而不是erase flash!当ASA5510的flash被erase后,如何将新的IOS拷贝到5510内呢? 如下:1. 当flash被erase后设备会 ...

  3. Python字典 (dictionary)

    字典dict,是Python唯一的标准mapping类型,也是内置在Python解释器中的. mapping object把一个可哈希的值(hashable value)映射到一个任意的object上 ...

  4. Linux下用arptables防arp攻击

    Linux下网络层防火墙iptables很强大,链路层也有类似的防火墙arptables,可针对arp地址进行限制,防止ARP网关欺骗攻击,再配合静态绑定MAC和向网关报告正确的本机MAC地址,有效解 ...

  5. 编译安装-Percona 5.6

    CentOS 6.4编译安装Percona 5.6.16 Percona 下载地址:http://www.percona.com 一.卸载原有MySQL检查是否安装有MySQL Server: rpm ...

  6. 【PAT】1020. Tree Traversals (25)

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...

  7. (《数论及应用1.3》NEFU 116 两仪剑法(最小公倍数&&最大公约数))

    #include <iostream> using namespace std; long long gcd(long long a, long long b){ if(b == 0){ ...

  8. 关于heritrix安装配置时出现”必须限制口令文件读取访问权限”的解决方法

    转载:http://www.floatinglife.cn/关于heritrix安装配置时出现必须限制口令文件读取访问 最近开始写一个RSS聚合程序,需要爬虫支持,于是就整来heritrix,没想到, ...

  9. Linux 禁用笔记本触摸板

    1. 查看有什么设备 xinput list 输出: ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST p ...

  10. 为什么iphone手机比android手机流畅

    作为当下最流行.市场占用份额最大的两大手机操作系统IOS和android,目前两者加起来的市场占用率达到90%.我曾经一直用android手机,没有用过iphone,那时候正直iphone4和ipho ...