• 关于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; } }
  • 相关阅读:
    使用SpringMVC的crud操作时,进行数据修改,但是修改成功后,页面无法显示lastName属性值(被修改的那条记录)
    使用SpringMVC时报错HTTP Status 405
    使用springmvc时报错org.springframework.beans.NullValueInNestedPathException: Invalid property 'department' of bean class [com.atguigu.springmvc.crud.entities.Employee]:
    快速傅里叶变换应用之二 hdu 4609 3-idiots
    离散傅立叶变换与快速傅立叶变换(DFT与FFT)
    深度优先搜索(DFS)递归形式改为非递归形式
    模拟题组
    STL--自定义类型的排序
    多关键字的快速排序
    二叉树的前序和中序得到后序 hdu1710
  • 原文地址:https://www.cnblogs.com/a198720/p/4018894.html
Copyright © 2020-2023  润新知