• 关于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; } }
  • 相关阅读:
    codeforces 466D
    codeforces 360B
    codeforces 383D
    codeforces 679B
    codeforces 571B
    codeforces 494B
    CodeForces 660D Number of Parallelograms(n个点所能组成的最多平行四边形数量)
    算法竞赛模板 最短路
    算法竞赛模板 string中substr函数的运用
    HDOJ 1269 迷宫城堡(tarjan模板题)
  • 原文地址:https://www.cnblogs.com/a198720/p/4018894.html
Copyright © 2020-2023  润新知