自学内容网 自学内容网

InputStream转String的各种方法

1、IOUtils.toString

String result = IOUtils.toString(inputStream,StandardCharsets.UTF_8);

2、CharStreams

String result = CharStreams.toString(new InputStreamReader(inputStream,Charsets.UTF_8))

附:InputStreamReader类

java.io.InputStreamReader extends Reader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符

继承父类的方法:
int read():读取单个字符并返回
int read(char[] cbuf): 一次读取多个字符,将字符读入数组
void close():关闭该流并释放与之相关联的所有资源

构造函数:
InputStreamReader(InputStream in):创建一个使用默认字符集的InputStreamReader

InputStreamReader(InputStream in,String charsetName)创建使用指定字符集的InputStreamReader

BufferedReader、BufferedWriter
BufferedReader 类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行。
可以通过构造函数指定缓冲区大小也可以使用默认大小。对于大多数用途,默认值足够大。
由 Reader 构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成,建议通过 BufferedReader 包装 Reader 的实例类以提高效率。(Reader 构成的对象是字符对象,每次的读取请求都会涉及到字节读取解码字符的过程,而 BufferedReader 类中有设计减少这样的解码次数的方法,进而提高转换效率)

BufferedReader in  = new BufferedReadernew FileReader(“foo.in”));

readLine()读取一行字符串,不含末尾换行符,读取结束再读取返回 null。

BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("d:/abc/f11")));

        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();

3、使用Scanner(JDK)

Scanner s = new Scanner(inputStream).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";

4、使用Stream API

String result = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"))

5、使用parallel 和上面基本相同

6、使用InputStreamReader和StringBuilder

final int bufferSize = 1024;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream,"UTF-8");
while(true) {
int rsz = in.read(buffer,0,buffer.length);
if (rsz < 0) {
break;
}
out.append(buffer,0,rsz);
}
return out.toString();

7、使用StringWriter和IOUtils.copy

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream,writer,"UTF-8");
return writer.toString();

8、常用 ByteArrayOutputStream()

ByteArraryOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer,0,length);
}
return result.toString("UTF-8")

9、常用 使用BufferedReader

String newLine = System.getProperty("line.separator");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder result = new StringBuilder();
String line; boolean flag = false;
while ((line = reader.readLine()) != null) {
    result.append(flag? newLine: "").append(line);
    flag = true;
}
return result.toString();

10、BufferedInputStream和ByteArrayOutputStream

BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1){
buf.write((byte) result);
result = bis.read();
}
return buf.toString();

11、使用inputStream.read()和StringBuilder

int ch;
StringBuilder sb = new StringBuilder();
while((ch = inputStream.read()) != -1) {
sb.append((char) ch);
}
return sb.toString()

原文地址:https://blog.csdn.net/qq_37831759/article/details/142936801

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!